windows api编程入门_WindowsAPI调用DLL微软Windows官网

TranslateMessage
是用来把虚拟键消息转换为字符消息。由于
Windows
对所有键盘编码都是采用虚拟键的定义,这样当按键按下时,并不得字符消息,需要键盘映射转换为字符的消息。 TranslateMessage
函数用于将虚拟键消息转换为字符消息。字符消息被投递到调用线程的消息队列中,当下一次调用
GetMessage
函数时被取出。当我们敲击键盘上的某个字符键时,系统将产生
WM_KEYDOWN

WM_KEYUP
消息。这两个消息的附加参数(
wParam

lParam
)包含的是虚拟键代码和扫描码等信息,而我们在程序中往往需要得到某个字符的
ASCII
码,
TranslateMessage
这个函数就可以将
WM_KEYDOWN

WM_ KEYUP
消息的组合转换为一条
WM_CHAR
消息(该消息的
wParam
附加参数包含了字符的
ASCII
码),并将转换后的新消息投递到调用线程的消息队列中。注意,
TranslateMessage
函数并不会修改原有的消息,它只是产生新的消息并投递到消息队列中。 也就是说
TranslateMessage
会发现消息里是否有字符键的消息,如果有字符键的消息,就会产生
WM_CHAR
消息,如果没有就会产生什么消息。   函数
TranslateMessage
声明如下: WINUSERAPI BOOL WINAPI TranslateMessage     __in CONST MSG *lpMsg); lpMsg
是检查需要转换的消息。   调用这个函数的例子如下: #001 //
主程序入口 #002 // #003 // 
蔡军生
 2007/07/19 #004 // QQ: 9073204 #005 // #006 int APIENTRY _tWinMainHINSTANCE hInstance, #007                       HINSTANCE hPrevInstance, #008                       LPTSTR    lpCmdLine, #009                       int       nCmdShow) #010 {
#011  UNREFERENCED_PARAMETERhPrevInstance); #012  UNREFERENCED_PARAMETERlpCmdLine); #013  #014   // #015  MSG msg; #016  HACCEL hAccelTable; #017  #018  //
加载全局字符串。 #019  LoadStringhInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING); #020  LoadStringhInstance, IDC_TESTWIN, szWindowClass, MAX_LOADSTRING); #021  MyRegisterClasshInstance); #022  #023  //
应用程序初始化
: #024  if !InitInstance hInstance, nCmdShow)) #025  {
#026         return FALSE; #027  } #028  #029  hAccelTable = LoadAcceleratorshInstance, MAKEINTRESOURCEIDC_TESTWIN)); #030  #031  //
消息循环
: #032  BOOL bRet; #033  while bRet = GetMessage&msg, NULL, 0, 0)) != 0) #034  {
#035          if bRet == -1) #036         {
#037               //
处理出错。 #038  #039         } #040         else if !TranslateAcceleratormsg.hwnd, hAccelTable, &msg)) #041         {
#042               TranslateMessage&msg); #043               DispatchMessage&msg); #044         } #045  } #046  #047  return int) msg.wParam; #048 } #049   


42
行是调用函数
TranslateMessage
作消息转换工作。 

Published by

风君子

独自遨游何稽首 揭天掀地慰生平

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注