Новичок
Профиль
Группа: Участник
Сообщений: 12
Регистрация: 25.2.2010
Репутация: нет Всего: нет
|
Ребят объясните, почему закрыв временное окно вместе с ним закрывается и главное, ведь сообщение передается оконной процедуре временного окна. | Код | #include<windows.h> #include<tchar.h> LRESULT CALLBACK MainWndProc(HWND, UINT, WPARAM, LPARAM); LRESULT CALLBACK PopupWndProc(HWND, UINT, WPARAM, LPARAM); void RegClass(HINSTANCE hIstance, WNDPROC WndProc, LPCWSTR szClassName); //=================================================== int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { HWND hMainWnd, hPopupWnd; MSG msg; RegClass(hInstance, MainWndProc, _T("Main Window")); RegClass(hInstance, PopupWndProc, _T("Popup Window")); hMainWnd=CreateWindow(_T("Main Window"), _T("Window 1"), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT,0,CW_USEDEFAULT,0, (HWND)NULL, (HMENU)NULL, (HINSTANCE)hInstance, NULL); if(!hMainWnd) { MessageBox(NULL, _T("Cannot create window"), _T("Error"), MB_OK); return 1; }
hPopupWnd=CreateWindow(_T("Popup Window"), _T("Window 2"), WS_POPUPWINDOW | WS_CAPTION | WS_VISIBLE, CW_USEDEFAULT,0,500,400, (HWND)NULL, (HMENU)NULL, (HINSTANCE)hInstance, NULL); if(!hMainWnd) { MessageBox(NULL, _T("Cannot create window"), _T("Error"), MB_OK); return 1; }
while(GetMessage(&msg, NULL,0,0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam; }
//==================================================================================== LRESULT CALLBACK MainWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { HDC hDc; PAINTSTRUCT ps; RECT rect; switch(uMsg) { case WM_PAINT: hDc=BeginPaint(hWnd, &ps); GetClientRect(hWnd, &rect); DrawText(hDc,_T("Window's center"), -1, &rect, DT_SINGLELINE | DT_CENTER | DT_VCENTER); EndPaint(hWnd, &ps); break; case WM_CLOSE: DestroyWindow(hWnd); break; case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hWnd, uMsg,wParam, lParam); } return 0; }
LRESULT CALLBACK PopupWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch(uMsg) { case WM_CLOSE: DestroyWindow(hWnd); break; case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hWnd, uMsg,wParam, lParam); } return 0; } void RegClass(HINSTANCE hInstance, WNDPROC WndProc, LPCWSTR szClassName) { WNDCLASSEX wc;
wc.cbSize=sizeof(wc); wc.style=CS_HREDRAW | CS_VREDRAW; wc.lpfnWndProc=WndProc; wc.cbClsExtra=0; wc.cbWndExtra=0; wc.hInstance=hInstance; wc.hIcon=LoadIcon(NULL, IDI_APPLICATION); wc.hCursor=LoadCursor(NULL, IDC_ARROW); wc.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH); wc.lpszMenuName=NULL; wc.lpszClassName=szClassName; wc.hIconSm=NULL;
if(!RegisterClassEx(&wc)) { MessageBox(NULL, _T("Cannot register class"), _T("Error"), MB_OK); return; } }
|
Это сообщение отредактировал(а) freeuserr - 4.12.2011, 23:10
|