测试WM_TIMER 消息 以及计时器

/*
 名称 Timer
 功能:每产生一个WM_TIMER消息则屏幕变换一次颜色.
 目的:测试WM_TIMER 消息 以及计时器。
*/

#include <windows.h>

#define ID_TIMER 1

LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam,LPARAM lParam);

LRESULT CALLBACK TimerProc(HWND hwnd, UINT uMsg, UINT iTimerID,DWORD dwTime);


int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, 
       LPSTR lpCmdLine, int nCmdShow)    
{
 WNDCLASS wndcls;
 MSG   msg;
 HWND  hwnd;
 TCHAR  szClassName[] = TEXT("Myclass");
 
 wndcls.style = CS_VREDRAW | CS_HREDRAW | CS_DBLCLKS;
 wndcls.lpfnWndProc = WindowProc;
 wndcls.cbClsExtra = 0;
 wndcls. cbWndExtra = 0;
 wndcls. hInstance = hInstance;
 wndcls. hIcon =LoadIcon(NULL,IDI_APPLICATION); 
 wndcls.hCursor = LoadCursor(NULL,IDC_ARROW);
 wndcls. hbrBackground = (HBRUSH) GetStockObject(WHITE_BRUSH);
 wndcls.lpszMenuName =NULL;
 wndcls.lpszClassName = szClassName;
 RegisterClass(&wndcls);
 hwnd = CreateWindow(szClassName,"Timer demo ",WS_OVERLAPPEDWINDOW ,
  CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,
  NULL,NULL,hInstance,NULL);
 ShowWindow(hwnd,nCmdShow);
 UpdateWindow(hwnd);
 while(GetMessage(&msg,NULL,0,0))
 {
  TranslateMessage(&msg);
  DispatchMessage(&msg);
 }
 return msg.wParam;
}

LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam,LPARAM lParam)
{
 switch (uMsg)
 {
 case WM_CREATE:
  {
   SetTimer(hwnd,ID_TIMER,1000,TimerProc);
   return 0;
  }

 case WM_DESTROY:
  {
   KillTimer(hwnd,ID_TIMER);
   PostQuitMessage(0);
   return 0;
  }
 }
 return DefWindowProc(hwnd,uMsg,wParam,lParam);
}

LRESULT CALLBACK TimerProc(HWND hwnd, UINT uMsg, UINT iTimerID,DWORD dwTime)
{
 HDC hdc;
 PAINTSTRUCT pt;
 HBRUSH  hBrush;
 RECT  rect;
 static BOOL  IsPaint = FALSE;    //static 作用?如果没有它,该城市将得不到想要的效果
 MessageBeep (-1) ;          
 IsPaint = !IsPaint;
 hdc = GetDC(hwnd);
 GetClientRect(hwnd,&rect);
 hBrush = CreateSolidBrush(IsPaint ? RGB(255,0,0) : RGB(0,0,255));    //注意
 FillRect(hdc,&rect,hBrush);
 ReleaseDC(hwnd,hdc);
 DeleteObject(hBrush);

}


 

/*
   1.windows 直接将WM_TIMER 消息发送到 TimerProc函数去处理,
  像其他窗口过程一样刺函数也必须定义成CALLBACK,因为他是window本
  身要呼叫的,
   2.CALLBACK 函数的参数和返回值取决于CALLBACK函数的目的。
  WM_TIMER函数的参数和WindowProc的参数相同,WM_TIMER不需要返
  回值。
   3.当您使用 CALLBACK 函数 处理WM_TIMER消息时呼叫
  SetTimer(hwnd,ID_TIMER,1000,TimerProc);  注意最后一个参数!
  在这以后所有WM_TIMER消息都会发送给TimerProc函数.
   4.static 的用法? 本程序如果修改该参数,则得不到该有的效果。

                    2012.07.20  21:13:50
  
*/

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值