Hi, I've been reading Programming Windows by Charles Petzold and I've found an interesting example of drawing random rectangles. Here's the code:
I have question regarding this program.Code:#include <windows.h>
LRESULT CALLBACK WndProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam);
void DrawRectangle(HWND);
static int cxClient,cyClient;
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
{
static LPSTR szClsName="RandRect";
HWND hwnd;
MSG msg;
WNDCLASS wndclass;
ZeroMemory(&wndclass,sizeof(WNDCLASS));
wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);
wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION);
wndclass.hInstance=hInstance;
wndclass.lpfnWndProc=WndProc;
wndclass.lpszClassName=szClsName;
wndclass.lpszMenuName=NULL;
wndclass.style=CS_HREDRAW | CS_VREDRAW;
RegisterClass(&wndclass);
hwnd=CreateWindow(szClsName,"Random Rectangles",WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,
CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,hInstance,NULL);
if(!hwnd)
{
MessageBox(hwnd,"KIvla",NULL,MB_OK);
return 0;
}
ShowWindow(hwnd,nCmdShow);
UpdateWindow(hwnd);
while(TRUE)
{
if (PeekMessage (&msg, NULL, 0, 0, PM_REMOVE))
{
if (msg.message == WM_QUIT)
break ;
TranslateMessage (&msg) ;
DispatchMessage (&msg) ;
}
else
DrawRectangle (hwnd) ;
}
return msg.wParam;
}
LRESULT CALLBACK WndProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
switch(uMsg)
{
case WM_SIZE:
cxClient=LOWORD(lParam);
cyClient=HIWORD(lParam);
return 0;
case WM_DESTROY:
PostQuitMessage(WM_QUIT);
return 0;
}
return DefWindowProc(hWnd,uMsg,wParam,lParam);
}
void DrawRectangle(HWND hwnd)
{
HBRUSH hBrush;
HDC hdc;
RECT rect;
if(cxClient==0 || cyClient==0)
return;
SetRect(&rect, rand () % cxClient, rand () % cyClient,
rand () % cxClient, rand () % cyClient) ;
hBrush=CreateSolidBrush(RGB(rand()%256,rand()%256,rand()%256));
hdc=GetDC(hwnd);
FillRect(hdc,&rect,hBrush);
ReleaseDC(hwnd,hdc);
DeleteObject(hBrush);
}
1. While compiling geting warning message at line:
possible loss of dataCode:return msg.wParam;
Why this warning and if is OK juct to cast it with (int)?
2. I've read in the book that PeekMessage() function is used because of "There must be plenty of "dead time" in Windows—time during which all the message queues are empty and Windows is just sitting around waiting for keyboard or mouse input.". I noticed that there is a small delay between mouse click on close button (x) and actual closing window and suspect this is because of PeekMessage. i'd like to know why this is happening, is there any time quantum that is used in Windows or what?
Thanks for help!