c++ 一个关于计时器的源代码 <转载>

#include<windows.h>

LRESULT CALLBACK WndProc( HWND, UINT, WPARAM, LPARAM ) ; 
VOID CALLBACK TimerProc( HWND, UINT, UINT, DWORD ) ;      

 int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow )   

{
    static TCHAR szAppName[] = TEXT("UseTimer") ;
   HWND        hwnd ;
    MSG            msg ;
    WNDCLASS    wndclass ;

     wndclass.lpszClassName        = szAppName ;
    wndclass.hInstance            = hInstance ;
    wndclass.lpfnWndProc        = WndProc ;
    wndclass.style                = CS_HREDRAW | CS_VREDRAW ;
    wndclass.hbrBackground        = (HBRUSH) GetStockObject(WHITE_BRUSH) ;
    wndclass.hIcon                = LoadIcon( NULL, IDI_APPLICATION ) ;
     wndclass.hCursor            = LoadCursor( NULL, IDC_ARROW ) ;
     wndclass.cbClsExtra            = 0 ;
     wndclass.cbWndExtra            = 0 ;
    wndclass.lpszMenuName        = NULL ;

    if( !RegisterClass(&wndclass) )
    {
        MessageBox( NULL, TEXT("错误, 无法注册窗口类!"), szAppName, MB_OK | MB_ICONERROR ) ;
         return 0 ;
     }
 
     hwnd = CreateWindow( szAppName, TEXT("UseTimer - Demo"),
         WS_OVERLAPPEDWINDOW,
         CW_USEDEFAULT, CW_USEDEFAULT,
         900, 600,
        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 message, WPARAM wParam, LPARAM lParam )    //typedef LONG LRESULT,callback 为回调函数,由用户定义,系统调用的函数,参数列表中第1个参数,是消息要传递的窗口,参数2是消息的id(也就是这是个什么样的消息,比如鼠标左键按下对应的消息是WM_LBUTTONDOWN),参数3和参数4是消息的具体内容
 {
     HDC hdc ;
     PAINTSTRUCT  ;
     static int iTimerID ;        //记录计时器ID
    static int y = 10 ;            //记录已输出行y坐标
 
     switch(message)
     {
     case WM_CREATE:        //处理WM_CREATE消息时完成计时器的创建
        iTimerID = SetTimer( hwnd, 0, 5000, TimerProc ) ;    //设置一个ID随机分配、时间间隔为5秒, 有回调函数的计时器
         SetTimer( hwnd, 2, 3000, NULL ) ;                    //设置一个ID为2, 时间间隔为3秒, 无回调函数的计时器
         return 0 ;
 
     case WM_TIMER:        //处理WM_TIMER消息
        switch(wParam)
         {
         case 2:
            hdc = GetDC( hwnd ) ;
             TextOut( hdc, 10, y, TEXT("我是来自ID为2的计时器, 间隔为3秒, 我负责绘制文字。"),
                 lstrlen("我是来自ID为2的计时器, 间隔为3秒, 我负责绘制文字。") ) ;
             y += 20 ;        //向下移动20个像素, 模拟文字换行
             ReleaseDC( hwnd, hdc ) ;
             ValidateRect( hwnd, NULL ) ;
             break ;

         /*
             如果创建了更多的计时器, 这里继续case计时器的ID, 用来区分不同计时器发来的消息
         */
         }
         return 0 ;
 
     case WM_DESTROY:
         KillTimer( hwnd, iTimerID ) ;        //销毁ID为随机分配的计时器
         KillTimer( hwnd, 2 ) ;                //销毁ID为2的计时器
         PostQuitMessage( 0 ) ;
         return 0 ;
     }
     return DefWindowProc( hwnd, message, wParam, lParam ) ;
 }
 
 VOID CALLBACK TimerProc( HWND hwnd, UINT message, UINT iTimerID, DWORD dwTime )
 {    //定义计时器回调函数
     MessageBox( hwnd, TEXT("我是负责弹出对话框的计时器! 间隔为5秒!"), TEXT("计时器消息"), MB_OK ) ;
 }

 参考地址:http://www.cnblogs.com/mr-wid/archive/2012/12/05/2802444.html

转载于:https://www.cnblogs.com/vivianer/archive/2012/12/05/2803555.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值