Многооконная программа С++ - кнопка "Создать" во втором окне

Итак, я нашел несколько учебников / уроков с несколькими окнами, но ни один из них, похоже, не затрагивает мою проблему.

Я пытаюсь создать кнопку во втором окне, а не в другом.

Вот мой код (за исключением ненужного)

HWND hWindow1;
HWND hWindow2;
HINSTANCE hInstGlobal;

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
...WindowClass / RegisterClass...

//HWND hWindow1;
hWindow1 = CreateWindow("WinProg", "Window_1", WS_OVERLAPPEDWINDOW, 
    0, 0, 800, 600, NULL, NULL, hInstance, NULL);

//HWND hWindow2;
hWindow2 = CreateWindow("WinProg", "Window_2", WS_OVERLAPPEDWINDOW, 
    150, 50, 800, 600, NULL, NULL, hInstance, NULL);

    ...show/update windows...

...MessageLoop...
}

LRESULT WINAPI WinProc(HWND hWnd, UINT uiMessage, WPARAM wParam, LPARAM lParam)
{
switch(uiMessage)
{
    case WM_CREATE:
        {                      
            HWND hButton;
            hButton = CreateWindow("BUTTON", "PUSH ME NOW",
                WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
                50, 200, 150, 20,
                hWindow2, (HMENU) 1,
                hInstGlobal, NULL);
        } 

Никакие кнопки не создаются с использованием этого кода.

что касается моей отладки, я могу создать кнопку в первом окне, изменив hWindow2 в WM_CREATE на hWindow1. Но это не то, чего я хочу. Однако я могу создать кнопку во втором окне, оставив ее как hWindow2, но изменив событие сообщения на WM_PAINT...

Я не понимаю, что происходит, и я бы предпочел не соглашаться на обходной путь.

Любая помощь приветствуется. Спасибо.


person Dukkha    schedule 07.05.2013    source источник
comment
Используется ли WinProc() для обоих окон? в этом случае вам нужно будет создать кнопку на WM_CREATE только тогда, когда hWnd == hWindow2   -  person Edward Clements    schedule 07.05.2013
comment
@EdwardClements Да, я тоже это пробовал. Я получаю точно такие же результаты.   -  person Dukkha    schedule 07.05.2013


Ответы (1)


Разве это не очевидный способ создать кнопку на hWindow2?

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
    ...WindowClass / RegisterClass...

    //HWND hWindow1;
    hWindow1 = CreateWindow("WinProg", "Window_1", WS_OVERLAPPEDWINDOW, 
        0, 0, 800, 600, NULL, NULL, hInstance, NULL);

    //HWND hWindow2;
    hWindow2 = CreateWindow("WinProg", "Window_2", WS_OVERLAPPEDWINDOW, 
        150, 50, 800, 600, NULL, NULL, hInstance, NULL);

    HWND hButton = CreateWindow("BUTTON", "PUSH ME NOW",
        WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
        50, 200, 150, 20,
        hWindow2, (HMENU) 1,
        hInstGlobal, NULL);

   ...show/update windows...

   ...MessageLoop...
}

LRESULT WINAPI WinProc(HWND hWnd, UINT uiMessage, WPARAM wParam, LPARAM lParam)
{
    switch(uiMessage)
    {
        ...
    }
}

На самом деле не уверен, почему вы пытаетесь создать кнопку в коде, который используется как hWindow1, так и hWindow2. Также уменьшает потребность в глобальных переменных.

person john    schedule 07.05.2013
comment
Это был бы очевидный способ создать кнопку, и он прекрасно работает. У меня просто есть потребность понять, почему что-то не работает, когда должно: / Никогда не знаешь, когда это тебя укусит в долгосрочной перспективе. - person Dukkha; 07.05.2013