可以通过呼叫SetTimer函数为您的Windows程序分配一个定时器。SetTimer有一个时间间隔范围为1毫秒到4,294,967,295毫秒(将近50天)的整数型态参数,这个值指示Windows每隔多久时间给您的程序发送WM_TIMER消息。例如,如果间隔为1000毫秒,那么Windows将每秒给程序发送一个WM_TIMER消息。当您的程序用完定时器时,它呼叫KillTimer函数来停止定时器消息。在处理WM_TIMER消息时,您可以通过呼叫KillTimer函数来编写一个「限用一次」的定时器。KillTimer呼叫清除消息队列中尚未被处理的WM_TIMER消息,从而使程序在呼叫KillTimer之后就不会再接收到WM_TIMER消息。Windows把WM_TIMER消息发送到应用程序的正常窗口消息处理程序中,SetTimer呼叫如下所示:SetTimer(hwnd,1,uiMsecInterval,NULL);第一个参数是其窗口消息处理程序将接收WM_TIMER消息的窗口句柄。第二个参数是定时器ID,它是一个非0数值,在整个例子中假定为1。第三个参数是一个32位无正负号整数,以毫秒为单位指定一个时间间隔,一个60,000的值将使Windows每分钟发送一次WM_TIMER消息。可以通过呼叫KillTimer(hwnd,1);在任何时刻停止WM_TIMER消息(即使正在处理WM_TIMER消息)。此函数的第二个参数是SetTimer呼叫中所用的同一个定时器ID。在终止程序之前,您应该响应WM_DESTROY消息停止任何活动的定时器。画刷(Brush)——用于图案的填充;矩形填充函数——FillRectHDChdc;RECTrc;GetClientRect(hwnd,&rc);FillRect(hdc,&rc,hBrush);HBRUSHhBrush;hBrush=CreateSolidBrush(RGB(255,0,0));SelectObject可以调用该函数把诸如像颜色、笔、画刷等GDI对象选进“设备环境”。在调用SelectObject函数后一切的绘制函数都是针对该“设备环境”的。hBrush=CreateSolidBrush(RGB(255,100,20));SelectObject(hdc,hBrush);Rectangle(intx1,inty1,intx2,inty2);//矩形左上角坐标,和矩形右下角坐标RoundRect(intx1,inty1,intx2,inty2,intx3,inty3);//画一个圆角矩形,比矩形多了个X3,Y3,代表圆角的高和宽度Ellipse(intx1,inty1,intx2,inty2);//再以左上角为X1,Y1,右下角为X2,Y2的矩形中画以个椭圆IDC_ARROWIDC_IBEAMIDC_WAITIDC_CROSSIDC_UPARROWIDC_SIZEIDC_SIZEALLIDC_ICONIDC_SIZENWSEIDC_SIZENESWIDC_SIZEWEIDC_SIZENSIDC_SIZEALLIDC_NOIDC_HANDIDC_APPSTARTINGIDC_HELP在定义窗口类别结构时指定特定窗口的内定光标,例如:wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);鼠标样式对三键鼠标来说,三个键分别称为左键、中键、右键。在Windows表头文件中定义的与鼠标有关的标识符使用缩写LBUTTON、MBUTTON和RBUTTON。双键鼠标只有左键与右键,单键鼠标只有一个左键。只要鼠标跨越窗口或者在某窗口中按下鼠标按键,那么窗口消息处理程序就会收到鼠标消息,Windows为鼠标定义了21种消息。当鼠标移过窗口的显示区域时,窗口消息处理程序收到WM_MOUSEMOVE消息。当在窗口的显示区域中按下或者释放一个鼠标按键时,窗口消息处理程序会接收到下面这些消息:键按下释放按下(双键)左WM_LBUTTONDOWNWM_LBUTTONUPWM_LBUTTONDBLCLK中WM_MBUTTONDOWNWM_MBUTTONUPWM_MBUTTONDBLCLK右WM_RBUTTONDOWNWM_RBUTTONUPWM_RBUTTONDBLCLK只有对三键鼠标,窗口消息处理程序才会收到MBUTTON消息;只有对双键或者三键鼠标,才会接收到RBUTTON消息。只有当定义的窗口类别能接收DBLCLK(双击)消息,窗口消息处理程序才能接收到这些消息对于所有这些消息来说,其lParam值均含有鼠标的位置:低字组为x坐标,高字组为y坐标,这两个坐标是相对于窗口显示区域左上角的位置。您可以用LOWORD和HIWORD宏来提取这些值:x=LOWORD(lParam);y=HIWORD(lParam);wParam的值指示鼠标按键以及Shift和Ctrl键的状态。MK前缀代表「鼠标按键」。MK_LBUTTON按下左键MK_MBUTTON按下中键MK_RBUTTON按下右键MK_SHIFT按下Shift键MK_CONTROL按下Ctrl键例如,如果收到了WM_LBUTTONDOWN消息,而且值wParam&MK_SHIFT是TRUE(非0),就知道当左键按下时也按下了Shift键。caseWM_LBUTTONDOWN:if(!(wParam&MK_SHIFT)){//程序代码}return0;caseWM_RBUTTONUP:if(wParam&MK_SHIFT){//程序代码}return0;caseWM_LBUTTONDBLCLK:if(wParam&MK_CONTROL){//程序代码}return0;如果希望您的窗口消息处理程序能够收到双按键的鼠标消息,那么在呼叫RegisterClass初始化窗口类别结构时,必须在窗口风格中包含CS_DBLCLKS标识符:wndclass.style=CS_HREDRAW|CS_VREDRAW|CS_DBLCLKS;如果在窗口风格中未包含CS_DBLCLKS,而使用者在短时间内双击了鼠标按键,那么窗口消息处理程序会接收到下面这些消息:WM_LBUTTONDOWNWM_LBUTTONUPWM_LBUTTONDOWNWM_LBUTTONUP如果您的窗口类别风格中包含了CS_DBLCLKS,那么双击时窗口消息处理程序将收到如下消息:WM_LBUTTONDOWNWM_LBUTTONUPWM_LBUTTONDBLCLKWM_LBUTTONUPWM_LBUTTONDBLCLK消息简单地替换了第二个WM_LBUTTONDOWN消息。如果双击中的第一次键操作完成单击的功能,那么双击这一消息是很容易处理的。第二次按键(WM_LBUTTONDBLCLK消息)则完成第一次按键以外的事情。当您按下一个键时,Windows把WM_KEYDOWN或者WM_SYSKEYDOWN消息放入有输入焦点的窗口的消息队列;当您释放一个键时,Windows把WM_KEYUP或者WM_SYSKEYUP消息放入消息队列中。键按下键释放非系统键WM_KEYDOWNWM_KEYUP系统键WM_SYSKEYDOWNWM_SYSKEYUP通常「down(按下)」和「up(放开)」消息是成对出现的。WM_SYSKEYDOWN和WM_SYSKEYUP中的「SYS」代表「系统」,它表示该按键对Windows比对Windows应用程序更加重要。WM_SYSKEYDOWN和WM_SYSKEYUP消息经常由与Alt相组合的按键产生,这些按键启动程序菜单或者系统菜单上的选项,或者用于切换活动窗口等系统功能(Alt-Tab或者Alt-Esc),也可以用作系统菜单快捷键(Alt键与一个功能键相结合,例如Alt-F4用于关闭应用程序)。程序通常忽略WM_SYSKEYUP和WM_SYSKEYDOWN消息,并将它们传送到DefWindowProc。WM_KEYDOWN和WM_KEYUP消息通常是在按下或者释放不带Alt键的键时产生的对所有四类按键消息,wParam是虚拟键代码,表示按下或释放的键,而lParam则包含属于按键的其它数据。虚拟键码保存在WM_KEYDOWN、WM_KEYUP、WM_SYSKEYDOWN和WM_SYSKEYUP消息的wParam参数中。此代码标识按下或释放的键标识符IBM兼容键盘VK_BACKBackspaceVK_TABTabVK_CLEARNumLock关闭时的数字键盘5VK_RETURNEnter(或者另一个)VK_SHIFTShift(或者另一个)VK_CONTROLCtrl(或者另一个)VK_MENUAlt(或者另一个)VK_PAUSEPauseVK_CAPITALCapsLockVK_ESCAPEEscVK_SPACESpacebar标识符IBM兼容键盘VK_PRIORPageUpVK_NEXTPageDownVK_ENDEndVK_HOMEHomeVK_LEFT左箭头VK_UP上箭头VK_RIGHT右箭头VK_DOWN下箭头VK_SNAPSHOTPrintScreenVK_INSERTInsertVK_DELETEDeleteVK_LWIN左Windows键VK_RWIN右Windows键用于数字键盘上的键(如果有的话):标识符IBM兼容键盘VK_NUMPAD0到VK_NUMPAD9NumLock打开时数字键盘上的0到9VK_MULTIPLY数字键盘上的*VK_ADD数字键盘上的+VK_SUBTRACT数字键盘上的-VK_DECIMAL数字键盘上的.VK_DIVIDE数字键盘上的/标识符IBM兼容键盘VK_F1到VK_F10功能键F1到F10VK_NUMLOCKNumLockVK_SCROLLScrollLock数字和字母的虚拟键码是ASCII码WM_CHAR