首先,这是我收到的文档中的描述。注意:我所要做的就是更改现有代码以满足这些要求
更改代码以创建 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 传递的变量,以设置为 Class Extra。那有意义吗?这是我的main.c:
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCMLine, int iCmdShow){ static TCHAR szAppName[] = TEXT ("HelloApplication"); HWND hwnd; 味精味精;WNDCLASS wnd类;长*计数;
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);
任何帮助,将不胜感激; 我已经在课堂上对这个信息进行过测验,但我不明白。我发布这个问题只是为了我自己的理解。
谢谢。