首页 »VB教程 » windowsapi函数:Windows API一日一练(13)TranslateMessage函数 »正文
windowsapi函数:Windows API一日一练(13)TranslateMessage函数
来源: 发布时间:星期一, 2009年9月28日 浏览:3次 评论:0
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 APIENTRY _tWinMain(HINSTANCE hInstance, #007 HINSTANCE hPrevInstance, #008 LPTSTR lpCmdLine, #009 nCmdShow) #010 { #011 UNREFERENCED_PARAMETER(hPrevInstance); #012 UNREFERENCED_PARAMETER(lpCmdLine); #013 #014 // #015 MSG msg; #016 HACCEL hAccelTable; #017 #018 // 加载全局串 #019 LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING); #020 LoadString(hInstance, IDC_TESTWIN, szWindowClass, MAX_LOADSTRING); #021 MyRegisterClass(hInstance); #022 #023 // 应用化: #024 (!InitInstance (hInstance, nCmdShow)) #025 { #026 FALSE; #027 } #028 #029 hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_TESTWIN)); #030 #031 // 消息循环: #032 BOOL bRet; #033 while ( (bRet = GetMessage(&msg, NULL, 0, 0)) != 0) #034 { #035 (bRet -1) #036 { #037 //处理出错 #038 #039 } #040 (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)) #041 { #042 TranslateMessage(&msg); #043 DispatchMessage(&msg); #044 } #045 } #046 #047 () msg.wParam; #048 } #049 第42行是 TranslateMessage作消息转换工作
相关文章
读者评论
发表评论
|
|