WIN32 时钟的使用

#define WIN32_LEAN_AND_MEAN// just say no to mfc

#include<windows.h> //include all the windows headers
#include<windowsx.h>// include useful macros
#include<mmsystem.h>//very important and include WINMM.LIB too
#include<stdio.h>
#include<stdlib.h>
#include<math.h>

//DEFINES

// defines for windows
#define WINDOW_CLASS_NAME "WINCLASS1"

#define WINDOW_WIDTH  400
#define WINDOW_HEIGHT 300


//timer defines

#define TIMER_ID1_SEC   1// id of 1 sec timer
#define TIMER_ID3_SEC   2// id of 2 sec timer
#define TIMER_ID30_SEC  3// id of 3 sec timer

//macros///

#define KEYDOWN(vk_code) ((GetAsyncKeyState(vk_code)&0x8000)?1:0)
#define KEYUP  (vk_code) ((GetAsyncKeyState(vk_code)&0x8000)?0:1)

//GLOBALS

HWND  main_window_handle=NULL; //globally track main window

HINSTANCE hinstance_app =NULL; //gloabally track hinstance

char buffer[80];               // globally printing buffer

//FUNCTIONS
LRESULT CALLBACK WindowProc(HWND hwnd,
       UINT msg,
       WPARAM wparam,
       LPARAM lparam
       )
{
 //this is the main message handler of the system
 PAINTSTRUCT ps;   // used in  WM_PAINT
 HDC         hdc;  // handle to a  device context
    char        buffer[80];//used to print strings
 static  int   counter1=0,
      counter2=0,
      counter3=0;

 //what is the messsage
 switch(msg)
 {
 case WM_CREATE:
  {
   //do initialization stuff here
   //create a 1 second timer
   SetTimer(hwnd ,TIMER_ID1_SEC,1000,NULL);
   
   //now the 3 second timer
   SetTimer(hwnd,TIMER_ID3_SEC,3000,NULL);

   //and finally the 30 second timer
   SetTimer(hwnd ,TIMER_ID30_SEC,30000,NULL);

   //return success
   return(0);
  }break;

 case WM_TIMER:
  {
   //there is a timer event ,test what timer fired
   switch(wparam)
   {
   case TIMER_ID1_SEC:
    {
     //print out a message
     //get the dc
     hdc=GetDC(hwnd);


     //set the color
     SetTextColor(hdc,RGB(0,255,0));
     SetBkColor(hdc,RGB(0,0,0));
     SetBkMode(hdc,OPAQUE);

     //build up the message
     sprintf(buffer,"The 1 second timer has fired %d times",++counter1);

     //print the message
     TextOut(hdc,0,0,buffer,strlen(buffer));

     //release the dc

     ReleaseDC(hwnd,hdc);
    }break;
   case TIMER_ID3_SEC:
    {
     MessageBeep(MB_ICONEXCLAMATION);

     //get the dc
     hdc=GetDC(hwnd);

     //set the color

     SetTextColor(hdc,RGB(0,255,0));
     SetBkColor(hdc,RGB(0,0,0));
     SetBkMode(hdc,OPAQUE);
     
     sprintf(buffer,"The 3 second timer has fired %d times",++counter2);
     TextOut(hdc,0,20,buffer,strlen(buffer));

     //release the dc
     ReleaseDC(hwnd,hdc);
    }break;
   case TIMER_ID30_SEC:
    {
     //make a beep
     MessageBeep(MB_ICONEXCLAMATION);

     //get the dc
     hdc=GetDC(hwnd);

     //set the color
     SetTextColor(hdc,RGB(0,225,0));
     SetBkColor(hdc,RGB(0,0,0));
     SetBkMode(hdc,OPAQUE);
     //build up the messages
     sprintf(buffer,"The 30 second timer has fired %d times",++counter3);

     //print the message
     TextOut(hdc,0,40,buffer ,strlen(buffer));

     //release the dc
     ReleaseDC(hwnd,hdc);

    }break;

    //test for other id's
   default:break;

   }//end switch
  }break;
 case WM_PAINT:
  {
   //simpley validate the window
   hdc=BeginPaint(hwnd,&ps);

   //end painting
   EndPaint(hwnd,&ps);

   //return success
   return(0);
  }break;
 case WM_DESTROY:
  {
   //kill the application ,this sends a WM_QUIT message
   PostQuitMessage(0);

   //return success
   return(0);
  }break;

 default:break;

 }//end switch

 //process any messages that we didn't take care of

 return (DefWindowProc(hwnd,msg,wparam,lparam));
}// end winproc


//WINMAIN/
int WINAPI WinMain(
       HINSTANCE hinstance,
       HINSTANCE hprevinstance,
       LPSTR lpcmdline,
       int ncmdshow
       )
{
 WNDCLASSEX winclass;// this will hold the class we create
 HWND hwnd;          // generic window handle
 MSG  msg;
 HDC  hdc;   // greaphics device   context

 //first fill in the window class stucture
 winclass.cbSize=sizeof(WNDCLASSEX);
 winclass.style =CS_DBLCLKS| CS_OWNDC|
     CS_HREDRAW|CS_VREDRAW;
 winclass.lpfnWndProc=WindowProc;
 winclass.cbClsExtra=0;
 winclass.cbWndExtra=0;
 winclass.hInstance=hinstance;
 winclass.hIcon    =LoadIcon(NULL,IDI_APPLICATION);
 winclass.hCursor  =LoadCursor(NULL,IDC_ARROW);
 winclass.hbrBackground=(HBRUSH)GetStockObject(BLACK_BRUSH);
 winclass.lpszMenuName=NULL;
 winclass.lpszClassName=WINDOW_CLASS_NAME;
 winclass.hIconSm=LoadIcon(NULL,IDI_APPLICATION);

 //save  hinstance in global
 hinstance_app=hinstance;

 //register the window class
 if(!RegisterClassEx(&winclass))
  return(0);
 //create the window

 if(!(hwnd=CreateWindowEx(
   NULL,WINDOW_CLASS_NAME,
   "Multiple Timer Demo",
   WS_OVERLAPPEDWINDOW|WS_VISIBLE,
   0,0,
   WINDOW_WIDTH,
   WINDOW_HEIGHT,
   NULL,
   NULL,
   hinstance,
   NULL
  )))
  return(0);
 //save main window handle
 main_window_handle=hwnd;

 //get the graphics device context
 hdc=GetDC(hwnd);

 //enter main event loop,but this time we use PeekMessage()
 //instead of GetMessage() to retrieve messsages
 while(TRUE)
 {
  //test if there is a message in queue ,if so get it
  if(PeekMessage(&msg,NULL,0,0,PM_REMOVE))
  {
  
   if(msg.message==WM_QUIT)
     break;
   //translate any accelerator keys
  TranslateMessage(&msg);
  //send the message to the window proc
  DispatchMessage(&msg);

  }//end if
  
  // main game processing goes here
  if(KEYDOWN(VK_ESCAPE))
   SendMessage(hwnd,WM_CLOSE,0,0);
  
 }//end while

 

 //release the device context
 ReleaseDC(hwnd,hdc);
 return (msg.wParam);

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值