|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
10.04.2011, 19:07 | #1 |
Пользователь
Регистрация: 13.12.2010
Сообщений: 56
|
Зависание окна
Здравствуйте, уважаемые форумчане.
Возникал проблема: при выполнении следующей программы (код которой приведен ниже), окно зависает, то есть нельзя ни закрыть, ни свернуть, ни развернуть, ни переместить. Подскажите, в чем проблема. Заранее благодарю. #include <windows.h> #include <math.h> #define TWO_PI (2*3.14159) LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, PSTR szCmdLine, int iCmdShow) { HWND hwnd; MSG msg; WNDCLASSEX wndclass; static char Name[] = "Clover"; wndclass.style = CS_VREDRAW | CS_HREDRAW; wndclass.cbClsExtra = 0; wndclass.cbWndExtra = 0; wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH) ; wndclass.hCursor = LoadCursor(NULL, IDC_ARROW); wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION); wndclass.hIconSm = LoadIcon(NULL, IDI_APPLICATION); wndclass.hInstance = hInstance; wndclass.lpfnWndProc = WndProc; wndclass.lpszClassName = Name; wndclass.lpszMenuName = NULL; wndclass.cbSize = sizeof(wndclass); RegisterClassEx(&wndclass); hwnd = CreateWindow(Name, "Draw a clover", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL); ShowWindow(hwnd, iCmdShow); UpdateWindow(hwnd); while(GetMessage(&msg, NULL, 0, 0)); { TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam; } LRESULT CALLBACK WndProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam) { HDC hdc; PAINTSTRUCT ps; static HRGN hRgnClip; double fAngle, fRadius; HCURSOR hCursor; HRGN hRgnTemp[6]; int i; static int cxClient, cyClient; switch(iMsg) { case WM_SIZE: cxClient = LOWORD(lParam); cyClient = HIWORD(lParam); hCursor = SetCursor(LoadCursor(NULL, IDC_WAIT)); ShowCursor(TRUE); if(hRgnClip) DeleteObject(hRgnClip); hRgnTemp[0] = CreateEllipticRgn(0, cyClient/3, cxClient/2, 2*cyClient/3); hRgnTemp[1] = CreateEllipticRgn(cxClient/2, cyClient/3, cxClient, 2* cyClient/3); hRgnTemp[2] = CreateEllipticRgn(cxClient/3, 0, 2*cxClient/3, cyClient/2); hRgnTemp[3] = CreateEllipticRgn(cxClient/3, cyClient/2, 2*cxClient/3, cyClient); hRgnTemp[4] = CreateRectRgn(0, 0, 1, 1); hRgnTemp[5] = CreateRectRgn(0, 0, 1, 1); hRgnClip = CreateRectRgn(0, 0, 1, 1); CombineRgn(hRgnTemp[4], hRgnTemp[0], hRgnTemp[1], RGN_OR); CombineRgn(hRgnTemp[5], hRgnTemp[2], hRgnTemp[3], RGN_OR); CombineRgn(hRgnClip, hRgnTemp[4], hRgnTemp[5], RGN_XOR); for(i = 0; i < 6; i++) DeleteObject(hRgnTemp[i]); SetCursor(hCursor); ShowCursor(FALSE); return 0; case WM_PAINT: hdc = BeginPaint(hwnd, &ps); SetViewportOrgEx(hdc, cxClient/2, cyClient/2, NULL); SelectClipRgn(hdc, hRgnClip); fRadius = _hypot(cxClient/2, cyClient/2); for(fAngle = 0; fAngle < TWO_PI; fAngle += TWO_PI/360) { MoveToEx(hdc, 0, 0, NULL); LineTo(hdc, (int)(fRadius*cos(fAngle) + 0.5), (int)(-fRadius*sin(fAngle) + 0.5)); } EndPaint(hwnd, &ps); return 0; case WM_DESTROY: PostQuitMessage(0); return 0; } return DefWindowProc(hwnd, iMsg, wParam, lParam); } |
12.04.2011, 05:59 | #2 |
Brainsbreaker
Пользователь
Регистрация: 07.02.2011
Сообщений: 26
|
MasterSporta, ты так больше не чуди.
Код:
|
12.04.2011, 22:51 | #3 |
Пользователь
Регистрация: 13.12.2010
Сообщений: 56
|
упс, вот это я лохонулся!
Digit@ll спасибо за подсказку)) |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Зависание в 3d режимах | genya24 | Компьютерное железо | 13 | 31.10.2010 13:36 |
зависание | DeDoK | Работа с сетью в Delphi | 7 | 17.08.2010 09:56 |
Зависание | JRcoker | Общие вопросы Delphi | 8 | 06.08.2008 08:29 |
закрыть все дочерни окна, кроме главного окна | Worms | Общие вопросы Delphi | 2 | 03.12.2007 22:18 |
Как сделать чтобы дочерние окна в MDI-приложениях были вне главного окна??? | dimonchuk | Общие вопросы Delphi | 1 | 11.08.2007 12:13 |