资源描述:
《windows sdk编程系列文章04 ---- 处理键盘输入消息》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、windowssdk编程系列文章----处理键盘输入消息2008-04-0820:22在本课中,我们将要学习WINDOWS程序是如何处理键盘消息的。理论:因为大多数的PC只有一个键盘,所以所有运行中的WINDOWS程序必须共用它。WINDOWS将负责把击键消息送到具有输入焦点的那个应用程序中去。尽管屏幕上可能同时有几个应用程序窗口,但一个时刻仅有一个窗口有输入焦点。有输入焦点的那个应用程序的标题条总是高亮度显示的。实际上您可以从两个角度来看键盘消息:一是您可以把它看成是一大堆的按键消息的集合,在这种情况下,当您按下一个键时,WINDOWS就会发送一个WM_KE
2、YDOWN给有输入焦点的那个应用程序,提醒它有一个键被按下。当您释放键时,WINDOWS又会发送一个WM_KYEUP消息,告诉有一个键被释放。您把每一个键当成是一个按钮;另一种情况是:您可以把键盘看成是字符输入设备。当您按下“a”键时,WINDOWS发送一个WM_CHAR消息给有输入焦点的应用程序,告诉它“a”键被按下。实际上WINDOWS内部发送WM_KEYDOWN和WWM_KEYUP消息给有输入焦点的应用程序,而这些消息将通过调用TranslateMessage翻译成WM_CHAR消息。WINDOWS窗口过程函数将决定是否处理所收到的消息,一般说来您不大会
3、去处理WM_KEYDOWN、WM_KEYUP消息,在消息循环中TranslateMessage函数会把上述消息转换成WM_CHAR消息。在我们的课程中将只处理WM_CHAR。例子:(见光盘FirstWindow4)#include"Windows.h"#include"tchar.h"HWNDhWinMain;TCHARszClassName[]=_T("MyClass");TCHARszCaptionMain[]=_T("MyFirstWindow!");TCHARFontName[]=_T("script");WNDCLASSEXstdWndClass;W
4、PARAMkeyChar=0x20;//0x20是空格的ascii码,保证没有按键的时候程序正常显示。LRESULTCALLBACKProcWinMain( HWNDhWnd, UINTMsg, WPARAMwParam, LPARAMlParam){ PAINTSTRUCTstPs; HDChDC; HFONThFont,hOldFont; switch(Msg) { caseWM_PAINT:
5、 { hDC=BeginPaint(hWnd,&stPs); hFont=CreateFont(24,16,0,0,400,0,0,0,OEM_CHARSET,OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH
6、FF_SCRIPT,FontName); hOldFont=(HFONT)SelectObject(hDC,hFont); SetTextColor(hDC,RGB(200,20
7、0,50)); SetBkColor(hDC,RGB(0,0,255)); TextOut(hDC,0,0,(char*)&keyChar,1); SelectObject(hDC,hOldFont); EndPaint(hWnd,&stPs); } break; caseWM_CHAR: { keyChar=wParam; InvalidateRect(hWnd,NULL,TRUE); }
8、 break; caseWM_DESTROY: { PostQuitMessage(NULL); } break; default: returnDefWindowProc(hWnd,Msg,wParam,lParam); } return0;}intWINAPIWinMain( HINSTANCEhInstance, HINSTANCEhPrevInstance,
9、 LPSTRlpCmdLine,