主题:Link............Why???????????????
程序目的:在窗口中使用定时器,每隔1秒,交替用红色,绿色和连色的画刷来填充整个窗口客户区
请帮忙分析一下我的程序:
程序总是停在Link....
Compiling...
Timer.cpp
Linking...
Timer.exe - 0 error(s), 0 warning(s)
#include<windows.h>
#define ID_TIMER 1
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpszCmdLine,int nCmdShow)
{
static char szAppName[]="Timer1";
HWND hWnd;
MSG msg;
WNDCLASS WndClass;
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.lpfnWndProc =WndProc;
WndClass.hInstance =hInstance;
WndClass.lpszClassName =NULL;
WndClass.lpszMenuName =szAppName;
WndClass.style =CS_HREDRAW|CS_VREDRAW;
RegisterClass(&WndClass);
hWnd=CreateWindow(szAppName,
"Timer1 Demo Program",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,
NULL,
hInstance,
NULL);
while(!SetTimer(hWnd,ID_TIMER,1000,NULL))
if(IDCANCEL==MessageBox(hWnd,
"Too many clocks or timers!",szAppName,
MB_ICONEXCLAMATION|MB_RETRYCANCEL))
return FALSE;
ShowWindow(hWnd,nCmdShow);
UpdateWindow(hWnd);
while(GetMessage(&msg,0,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
LRESULT CALLBACK WndProc(HWND hWnd,UINT Message,WPARAM wParam,LPARAM lParam)
{
static int colors=0;
HBRUSH hBrush;
HDC hDC;
PAINTSTRUCT ps;
RECT rect;
switch(Message)
{
case WM_TIMER:
MessageBeep(-1);
InvalidateRect(hWnd,NULL,FALSE);
return 0;
case WM_PAINT:
hDC=BeginPaint(hWnd,&ps);
GetClientRect(hWnd,&rect);
switch(colors)
{
case 0:
hBrush=CreateSolidBrush(RGB(255,0,0));
colors++;
break;
case 1:
hBrush=CreateSolidBrush(RGB(0,255,0));
colors++;
break;
case 2:
hBrush=CreateSolidBrush(RGB(0,0,255));
colors=0;
}
FillRect(hDC,&rect,hBrush);
EndPaint(hWnd,&ps);
DeleteObject(hBrush);
return 0;
case WM_DESTROY:
KillTimer(hWnd,ID_TIMER);
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hWnd,Message,wParam,lParam);
}
请帮忙分析一下我的程序:
程序总是停在Link....
Compiling...
Timer.cpp
Linking...
Timer.exe - 0 error(s), 0 warning(s)
#include<windows.h>
#define ID_TIMER 1
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpszCmdLine,int nCmdShow)
{
static char szAppName[]="Timer1";
HWND hWnd;
MSG msg;
WNDCLASS WndClass;
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.lpfnWndProc =WndProc;
WndClass.hInstance =hInstance;
WndClass.lpszClassName =NULL;
WndClass.lpszMenuName =szAppName;
WndClass.style =CS_HREDRAW|CS_VREDRAW;
RegisterClass(&WndClass);
hWnd=CreateWindow(szAppName,
"Timer1 Demo Program",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,
NULL,
hInstance,
NULL);
while(!SetTimer(hWnd,ID_TIMER,1000,NULL))
if(IDCANCEL==MessageBox(hWnd,
"Too many clocks or timers!",szAppName,
MB_ICONEXCLAMATION|MB_RETRYCANCEL))
return FALSE;
ShowWindow(hWnd,nCmdShow);
UpdateWindow(hWnd);
while(GetMessage(&msg,0,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
LRESULT CALLBACK WndProc(HWND hWnd,UINT Message,WPARAM wParam,LPARAM lParam)
{
static int colors=0;
HBRUSH hBrush;
HDC hDC;
PAINTSTRUCT ps;
RECT rect;
switch(Message)
{
case WM_TIMER:
MessageBeep(-1);
InvalidateRect(hWnd,NULL,FALSE);
return 0;
case WM_PAINT:
hDC=BeginPaint(hWnd,&ps);
GetClientRect(hWnd,&rect);
switch(colors)
{
case 0:
hBrush=CreateSolidBrush(RGB(255,0,0));
colors++;
break;
case 1:
hBrush=CreateSolidBrush(RGB(0,255,0));
colors++;
break;
case 2:
hBrush=CreateSolidBrush(RGB(0,0,255));
colors=0;
}
FillRect(hDC,&rect,hBrush);
EndPaint(hWnd,&ps);
DeleteObject(hBrush);
return 0;
case WM_DESTROY:
KillTimer(hWnd,ID_TIMER);
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hWnd,Message,wParam,lParam);
}