Windows编程(5)|SDK定时器

先看一下我的消息处理代码,以及执行效果

 

//窗口过程函数的实现(消息处理函数)
LRESULT CALLBACK MyWindowProc(                                                                                                                                  HWND hwnd,      // handle to window 窗口句柄
				UINT uMsg,      // message identifier	消息标识
				WPARAM wParam,  // first message parameter
				LPARAM lParam   // second message parameter
				)
{

   switch(uMsg)
   {
   case WM_PAINT:
	   {
		   
		   TCHAR str[] = _T("这是一个Windows的SDK程序!");
		   HDC hDc;
		   PAINTSTRUCT  Ps;
		   hDc = BeginPaint(hwnd,&Ps); //获取设备环境句柄
		   SetTextColor(hDc,RGB(13,25,200)); //设置文本颜色
		   TextOut(hDc,0,0,str,18); //输出文字
		   EndPaint(hwnd,&Ps); //释放资源

		   SetTimer(hwnd,1,5000,NULL);//设定了一个编号为1的时钟,5s
		  
	   };
	    break;
   case WM_CLOSE: //点击"X"按钮时发送此消息,使消息循环停止 
	   if(IDYES == MessageBox(hwnd,_T("是否要退出?"),_T("提示"),MB_YESNO))
	   {
          DestroyWindow(hwnd); //销毁窗口,发送WM_DESTROY消息,注意程序进程还没退出
	   };	   
	   break;
   case WM_DESTROY:
	   {
		   KillTimer(hwnd,1);//销毁时钟
		   PostQuitMessage(NULL); //进程结束,完全退出程序
	   }
	   break;
   case WM_TIMER://时钟消息处理,间隔5s
	   {
		   TCHAR str[20];
		   memset(str,0,20);
		   SYSTEMTIME  SystemTime; //一个结构体
		   GetLocalTime(&SystemTime);//获取系统时间
		   wsprintf(str,_T("现在时间: %d:%d:%d"),SystemTime.wHour,SystemTime.wMinute,SystemTime.wSecond);
		   //这个wsprintf()函数的记一下,使用 Unicode 字符集会遇到很多麻烦,终于找到这个函数
                   MessageBox(hwnd,str,_T("消息框"),MB_OK);
	   };
	   break;
   default:
	   return DefWindowProc(hwnd,uMsg,wParam,lParam); //处理未处理的消息
	   break;
   }

   return 0;

}


 

设定了时间是每隔5s将发送一个WM_TIMER消息给系统,使用SetTimer()函数来创建一个定时器

UINT_PTR SetTimer(

       HWND hWnd, // 窗口句柄

  UINT_PTR nIDEvent, // 定时器ID,多个定时器时,可以通过该ID判断是哪个定时器

  UINT uElapse, // 时间间隔,单位为毫秒

  TIMERPROC lpTimerFunc // 回调函数 ,为NULL时表示使用系统默认回调函数

  );

 

程序结束前要销毁定时器,函数KillTimer()

 BOOL KillTimer(

  HWND hWnd, // 定时器所在的窗口句柄
  UINT uIDEvent // 定时器的ID,用于判断是哪个定时器

  );

 

系统时间的结构体SYSTEMTIME

SYSTEMTIME结构体中包括:

WORD wYear;                                             //年
WORD
wMonth;                                            //月
WORD
wDayOfWeek;                                  // 星期
WORD
wDay;                                               //日
WORD
wHour;                                             //时
WORD
wMinute;                                          //分
WORD
wSecond;                                        // 秒 
WORD
wMilliseconds;                                 //微秒

 

因为我使用 Unicode 字符集,造成了好多麻烦,出现好多错误

下面的情况也许你会遇到,也就是char str[]与LPCWSTR类型的转换问题,如果直接使用(LPCWSTR)str强制转换会出问题

先看一下情况

 

最后使用到的方法是用到了wsprintf()函数,以前我还真的没见过这个函数,是我为了解决上面问题网上搜索找到的

TCHAR类型也就是wchar_t类型,使用了wsprintf()这个函数后我的程序才能正确运行

 

有时候会在MFC编程中遇到CString转为LPCWSTR的问题,

可以直接使用强制转换(LPCWSTR)(LPCSTR)

看一下网上的介绍

 

 

 

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值