我有帶選單的 WinAPI 應用程式。我單擊“圖形”并選擇打開或繪制。究竟是什么并不重要。然后我關閉子視窗。當我嘗試再次打開它時,它不起作用。也許我應該把 ShowWindow(hWnd, SW_HIDE) 放在某個地方。但我不明白,它應該在哪里。也許還有另一種解決方案
主視窗
在這里,我將放置我的代碼:
回呼,我使用
LRESULT CALLBACK DrawProcedure(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp)
{
switch (msg)
{
case WM_PAINT:
{
...
}
case WM_LBUTTONDOWN:
{
...
}
}
return DefWindowProc(hWnd, msg, wp, lp);
}
LRESULT CALLBACK GraphProcedure(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp)
{
switch (msg)
{
case WM_PAINT:
{
...
}
break;
case WM_CREATE:
...
case WM_SIZE:
...
}
return DefWindowProc(hWnd, msg, wp, lp);
}
LRESULT CALLBACK SoftwareMainProcedure(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp)
{
switch (msg)
{
case WM_COMMAND:
switch (wp)
{
case draw_plot:
GraphClass.style = CS_HREDRAW | CS_VREDRAW;
GraphClass.lpfnWndProc = DrawProcedure;
GraphClass.hInstance = hInst;
GraphClass.lpszMenuName = NULL;
GraphClass.lpszClassName = L"graphics";
if (!RegisterClassW(&GraphClass))
{
return -1;
}
gr_draw = CreateWindow(L"graphics", L"DRAW", WS_VISIBLE | WS_BORDER | WS_MAXIMIZE | WS_HSCROLL | WS_VSCROLL | WS_OVERLAPPEDWINDOW, 0, 0, 800, 700, NULL, NULL, hInst, NULL);
break;
case open_plot:
GraphClass.style = CS_HREDRAW | CS_VREDRAW;
GraphClass.lpfnWndProc = GraphProcedure;
GraphClass.hInstance = hInst;
GraphClass.lpszMenuName = NULL;
GraphClass.lpszClassName = L"graphics";
if (!RegisterClassW(&GraphClass))
{
return -1;
}
gr_open = CreateWindow(L"graphics", L"OPEN", WS_VISIBLE | WS_BORDER | WS_MAXIMIZE | WS_OVERLAPPEDWINDOW, 0, 0, 800, 700, NULL, NULL, hInst, NULL);
break;
case OnExitSoftware:
PostQuitMessage(0);
break;
default:
break;
}
break;
case WM_SIZE:
{
...
}
break;
case WM_CREATE:
MainWndAddMenus(hWnd);
MainWndAddWidgets(hWnd);
break;
case WM_DESTROY: // close mainwindow
ExitSoftware();
break;
default:
return DefWindowProc(hWnd, msg, wp, lp);
}
}
uj5u.com熱心網友回復:
RegisterClassW(&GraphClass)
第二次不起作用,因為視窗類已經注冊,因為您已經在第一次注冊了它。
它回傳 false 告訴您它不起作用,然后您的代碼不會打開視窗。重申一下:您告訴計算機,如果RegisterClassW(&GraphClass)
它不起作用,那么它不應該打開視窗。
解決方案:要么在第一次使用(不是每次)時注冊視窗類,要么在程式啟動時注冊所有視窗類。
需要思考的附帶問題:如果計算機不起作用,您為什么要告訴計算機什么也不RegisterClassW(&GraphClass)
做?如果你告訴它彈出一個訊息框說“RegisterClassW(&GraphClass) 不起作用”,你就會知道問題出在哪里,因為訊息框會告訴你。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/508356.html