首先,這裏是我給出的文檔的描述。 注意:我所要做的只是更改現有代碼以滿足這些要求Win32:將lParam傳遞給CreateWindow並跟蹤打開的窗口
更改代碼以創建4個窗口,組織方式如演示中所示。 當用戶關閉一個窗口時,如果還有其他窗口仍然打開 它不會終止程序。用戶必須關閉所有這些才能停止編程,
您需要跟蹤打開的窗口數量(並在關閉時減去 )。沒有全球允許。沒有統計資料允許。
此外,您的程序必須使用lParam和CREATESTRUCT來初始化計數。
Possible functions and structs:
SetWindowLong()
GetWindowLong()
SetClassLong()
GetClassLong()
CREATESTRUCT
好的,現在,我結束了。我可以打開4個必需的窗口,並關閉一個窗口(發送WM_DESTROY消息)並沒有結束整個程序。我感到困惑的是傳遞一個lParam並使用CREATESTRUCT。
這裏是我的wndproc.c:
LRESULT CALLBACK HelloWndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam){
HDC hdc;
PAINTSTRUCT ps;
RECT rect;
int number = GetClassLongPtr(hwnd, 0);
switch (message){
case WM_CREATE:
if(number == 0){
SetClassLongPtr(hwnd, 0, (LONG)((CREATESTRUCT*)lParam)->lpCreateParams);
}
number++;
return 0;
case WM_PAINT:
hdc = BeginPaint(hwnd, &ps);
GetClientRect(hwnd, &rect);
DrawText(hdc, TEXT("Unique yet the same!"), -1, &rect,
DT_SINGLELINE | DT_CENTER | DT_VCENTER);
EndPaint(hwnd, &ps);
return 0;
case WM_DESTROY:
number--;
if(number == 0){
PostQuitMessage(0);
}
return 0;
}
return DefWindowProc(hwnd, message, wParam, lParam);
我試圖讓該變量,這是我作爲傳遞所創建的第一個窗口的lParam參數被設置爲額外的類。那有意義嗎?這是我的main.c:
INT WINAPI的WinMain(HINSTANCE的hInstance,HINSTANCE hPrevInstance, PSTR szCMLine,INT iCmdShow){ 靜態TCHAR szAppName [] = TEXT( 「HelloApplication」); HWND hwnd; 味精味精; WNDCLASS wndclass; LONG * count;
wndclass.style = CS_HREDRAW | CS_VREDRAW;
wndclass.lpfnWndProc = HelloWndProc;
wndclass.cbClsExtra = 5;
wndclass.cbWndExtra = 0;
wndclass.hInstance = hInstance;
wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION);
wndclass.hCursor = LoadCursor (NULL, IDC_ARROW);
wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH);
wndclass.lpszMenuName = NULL;
wndclass.lpszClassName = szAppName;
if (!RegisterClass (&wndclass)){
MessageBox (NULL, TEXT ("This program requires Windows 95/98/NT"),
szAppName, MB_ICONERROR);
return 0;
}
hwnd = CreateWindow(szAppName,
TEXT("Hello World for Windows"),
WS_OVERLAPPEDWINDOW,
100,
50,
400,
300,
NULL,
NULL,
hInstance,
count = 0);
ShowWindow(hwnd, iCmdShow);
UpdateWindow(hwnd);
任何幫助,將不勝感激;我已經在我的課堂上對這個信息進行了測驗,並且不理解它。我只是爲了自己的理解發布這個問題。
謝謝。
正常的方式做,這是'PostQuitMessage()'當他們中的一個關閉,這將關閉其餘的部分。 – Deanna
測驗的要點是僅在最終窗口關閉時才發送PostQuitMessage()。 – CallumStyan