O
Hey Snappo,
du benutzt sowohl in hWndMain, als auch in hWndMenu die gleiche WndProc.
Ich denke wenn du deinen Windows jeweils eine eigene WndProc schreibst, wird es so funktionieren wie du möchtest.
Beispiel
#include <windows.h>
#include <windowsx.h>
LRESULT CALLBACK WindowProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
LRESULT CALLBACK WindowProc2(HWND hWnd2, UINT message, WPARAM wParam, LPARAM lParam);
HWND hWnd, hWnd2, hButton1, hButton2;
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
WNDCLASSEX wc;
WNDCLASSEX wc2;
ZeroMemory(&wc, sizeof(WNDCLASSEX));
ZeroMemory(&wc2, sizeof(WNDCLASSEX));
wc.cbSize = sizeof(WNDCLASSEX);
wc.style = CS_HREDRAW | CS_VREDRAW;
wc.lpfnWndProc = WindowProc;
wc.hInstance = 0;
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = (HBRUSH)COLOR_WINDOW;
wc.lpszClassName = "WindowClass1";
wc2.cbSize = sizeof(WNDCLASSEX);
wc2.style = CS_HREDRAW | CS_VREDRAW;
wc2.lpfnWndProc = WindowProc2;
wc2.hInstance = 0;
wc2.hCursor = LoadCursor(NULL, IDC_ARROW);
wc2.hbrBackground = (HBRUSH)COLOR_WINDOW;
wc2.lpszClassName = "WindowClass2";
RegisterClassEx(&wc);
RegisterClassEx(&wc2);
hWnd = CreateWindowEx(WS_EX_CLIENTEDGE,
"WindowClass1",
"Main",
WS_VISIBLE | WS_OVERLAPPEDWINDOW,
0,
0,
800,
400,
NULL,
NULL,
0,
NULL);
hWnd2 = CreateWindowEx(WS_EX_CLIENTEDGE,
"WindowClass2",
"Menu",
WS_VISIBLE | WS_OVERLAPPEDWINDOW | WS_CHILD,
550,
5,
200,
350,
hWnd,
NULL,
0,
NULL);
ShowWindow(hWnd, nCmdShow);
MSG msg;
while(GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
LRESULT CALLBACK WindowProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch(message)
{
case WM_CREATE:
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc (hWnd, message, wParam, lParam);
}
LRESULT CALLBACK WindowProc2(HWND hWnd2, UINT message, WPARAM wParam, LPARAM lParam)
{
switch(message)
{
case WM_CREATE:
hButton1 = CreateWindowEx(NULL,"button","button1",WS_VISIBLE | WS_CHILD, 20, 20,60,30,hWnd2,(HMENU) 1,0,0);
hButton1 = CreateWindowEx(NULL,"button","button2",WS_VISIBLE | WS_CHILD, 20, 60,60,30,hWnd2,(HMENU) 2,0,0);
return 0;
case WM_COMMAND:
switch( wParam )
{
case 1:
CreateWindowEx(NULL,"static","button1 clicked",WS_VISIBLE | WS_CHILD, 20, 20,100,30,hWnd,0,0,0);
return 0;
case 2:
CreateWindowEx(NULL,"static","button2 clicked",WS_VISIBLE | WS_CHILD, 20, 60,100,30,hWnd,0,0,0);
return 0;
}
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc (hWnd2, message, wParam, lParam);
}
Grüße
Jan.