winapi c++ получить из списка(combobox) текс и поместить в edit

359
16 августа 2021, 15:00

идея такая нужно при нажатии кнопки взять текст из combobox и поместить в edit и вывести сообщение в виде модального окна, компилится без ошибок и запускается программа но при нажатии кнопки выводится только модальное окно в edit ничего не появляется, что я делаю не так, я использую g++ (i686-win32-dwarf-rev0, Built by MinGW-W64 project) 8.1.0

#include <windows.h>
#include <windowsx.h>
#include <CommCtrl.h>
#define BUTTON_ID 1025

LRESULT CALLBACK WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
HWND    hwnd_combobox,
        hwnd_edit,
        hwnd_button;
LPCSTR arr[] = {"строка 1", "строка 2", "строка 3"};
LPSTR value;
switch (uMsg) {
    case WM_CREATE:
        hwnd_combobox = CreateWindowEx(
            0, "COMBOBOX", "", 
            CBS_DROPDOWN | WS_VSCROLL | WS_CHILD | WS_OVERLAPPED | WS_VISIBLE,
            0, 0,
            200, 200,
            hwnd,
            NULL,
            (HINSTANCE)GetWindowLong(hwnd, GWL_HINSTANCE),
            NULL);
        //заполняем поля
        for(auto s : arr)
            ComboBox_AddString(hwnd_combobox, s);
        hwnd_button = CreateWindow(
            "button", "ok",
            WS_VISIBLE | WS_CHILD, 
            0, 50, 100, 40,
            hwnd,
            (HMENU)BUTTON_ID,
            (HINSTANCE)GetWindowLong(hwnd, GWL_HINSTANCE),
            NULL);
        hwnd_edit = CreateWindow(
            "edit", "",
            WS_VISIBLE | WS_CHILD | WS_BORDER, 
            0, 90, 300, 200,
            hwnd,
            NULL,
            (HINSTANCE)GetWindowLong(hwnd, GWL_HINSTANCE),
            NULL);
    break;

    case WM_COMMAND:
        switch (wParam){
            case BUTTON_ID:
                GetWindowText((HWND) lParam, value, 3);
                SetWindowText(hwnd_edit, value);
                MessageBox(NULL, "OK","OK", MB_OK);
            break;
            case CBN_SELCHANGE:
                GetWindowText((HWND) lParam, value, 3);
                SetWindowText(hwnd_edit, value);
                MessageBox(NULL, "OK","OK", MB_OK);
            break;
        }
    break;
    case WM_DESTROY:
        PostQuitMessage(0);
    break;
    default:
        return DefWindowProc(hwnd, uMsg, wParam, lParam);
}
return 0;
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
HWND hMainWnd;
LPCSTR szClassName = "MyClass";
MSG msg;
WNDCLASSEX wc;
wc.cbSize = sizeof(wc);
wc.style = CS_HREDRAW | CS_VREDRAW ;
wc.lpfnWndProc = WndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = LoadIcon(nullptr, IDI_APPLICATION);
wc.hCursor = LoadCursor(nullptr, IDC_ARROW);
wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
wc.lpszMenuName = nullptr;
wc.lpszClassName = szClassName;
wc.hIconSm = LoadIcon(nullptr, IDI_APPLICATION);
if (!RegisterClassEx(&wc)) return 0;
hMainWnd = CreateWindow(
    szClassName,
    "A Hello Application",
    WS_OVERLAPPEDWINDOW,
    CW_USEDEFAULT, 0,
    400, 400,
    (HWND)nullptr,
    (HMENU)nullptr,
    hInstance,
    nullptr
);
if (!hMainWnd) return 0;
ShowWindow(hMainWnd, nCmdShow);
UpdateWindow(hMainWnd);
while (GetMessage(&msg, nullptr, 0, 0)) {
    TranslateMessage(&msg);
    DispatchMessage(&msg);
}
return msg.wParam;

}

Answer 1

нашел ответ сделал хендел комбокс статический

static HWND    hwnd_combobox,
    hwnd_edit,
    hwnd_button;

и изменил обработку нажатии кнопки следующим образом

case BUTTON_ID:
                char str[255];
                ComboBox_GetLBText(hwnd_combobox, ComboBox_GetCurSel(hwnd_combobox), str);
                SetWindowText(hwnd_edit, str);
                MessageBox(NULL, "OK","OK", MB_OK);
        break;
READ ALSO
Несколько таблиц с общим хедером

Несколько таблиц с общим хедером

Имеется следующий макет

155
Error: Stray end tag

Error: Stray end tag

Что нужно исправить в данном коде чтобы он стал валидным и бузе ошибок?

264
Не передается значение в функцию

Не передается значение в функцию

В проекте VS пробую передать значение, которые получил из C# в функцию JS через a href почему-то выходит "Заполнить", вместо значения value="1"Новичок...

152