Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.04.2011, 19:07   #1
MasterSporta
Пользователь
 
Регистрация: 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);
}
MasterSporta вне форума Ответить с цитированием
Старый 12.04.2011, 05:59   #2
Digit@ll
Brainsbreaker
Пользователь
 
Аватар для Digit@ll
 
Регистрация: 07.02.2011
Сообщений: 26
По умолчанию

MasterSporta, ты так больше не чуди.

Код:
while(GetMessage(&msg, NULL, 0, 0));
в конце убери ;
Digit@ll вне форума Ответить с цитированием
Старый 12.04.2011, 22:51   #3
MasterSporta
Пользователь
 
Регистрация: 13.12.2010
Сообщений: 56
По умолчанию

упс, вот это я лохонулся!
Digit@ll
спасибо за подсказку))
MasterSporta вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Зависание в 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