시작하려면 여기에 제공된 문서의 설명이 있습니다. 참고 :이 요구 사항을 충족하기 위해 기존 코드를 변경하면됩니다.Win32 : lParam을 CreateWindow에 전달하고 열려있는 창을 추적합니다.
데모와 같이 구성된 4 개의 창을 만들려면 코드를 변경하십시오. 사용자가 창을 닫을 때 열려있는 다른 창이 여전히있는 경우 프로그램을 죽이지 않습니다.
열린 창 수를 추적하고 (닫을 때 빼기) 사용자는 프로그램을 중지하기 위해 모두 닫아야합니다. 세계가 허용되지 않습니다. 통계는 허용되지 않습니다.
또한 프로그램은 lParam 및 CREATESTRUCT를 사용하여 개수를 초기화해야합니다.
Possible functions and structs:
SetWindowLong()
GetWindowLong()
SetClassLong()
GetClassLong()
CREATESTRUCT
이제 제가 끝났습니다. 나는 4 개의 필요한 윈도우를 열 수 있었고 하나의 윈도우를 닫음으로써 (WM_DESTROY 메세지를 보내는 것) 전체 프로그램을 종료하지는 않았다. 내가 혼란스러워하는 것은 lParam의 전달과 CREATESTRUCT의 사용이다. 나는 엑스트라 클래스로 설정하기 내가 만든 첫 번째 창의 lParam에로 전달할 변수를, 얻으려고
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);
:
여기 내 wndproc.c입니다. 말이 돼? 여기 내 main.c를이다
INT WINAPI의 WinMain (HINSTANCE HINSTANCE, HINSTANCE hPrevInstance, PSTR szCMLine, INT iCmdShow) { 정적 TCHAR szAppName [] = TEXT ("HelloApplication"); HWND hwnd; MSG msg; WNDCLASS wndclass; LONG * 수;
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