加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

Windows API一日一练 13 TranslateMessage函数

发布时间:2020-12-14 02:34:21 所属栏目:Windows 来源:网络整理
导读:TranslateMessage 是用来把虚拟键消息转换为字符消息。由于 Windows 对所有键盘编码都是采用虚拟键的定义,这样当按键按下时,并不得字符消息,需要键盘映射转换为字符的消息。 TranslateMessage 函数用于将虚拟键消息转换为字符消息。字符消息被投递到调用
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 _tWinMain(HINSTANCE hInstance,
#007?????????????????????? HINSTANCE hPrevInstance,
#008?????????????????????? LPTSTR??? lpCmdLine,
#009?????????????????????? int?????? 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??if (!InitInstance (hInstance,nCmdShow))
#025??{
#026???????? return FALSE;
#027??}
#028?
#029??hAccelTable = LoadAccelerators(hInstance,MAKEINTRESOURCE(IDC_TESTWIN));
#030?
#031??// 消息循环 :
#032??BOOL bRet;
#033??while ( (bRet = GetMessage(&msg,NULL,0)) != 0)
#034??{
#035 ???????? if (bRet == -1)
#036???????? {
#037?????????????? // 处理出错。
#038?
#039???????? }
#040???????? else if (!TranslateAccelerator(msg.hwnd,hAccelTable,&msg))
#041???????? {
#042?????????????? TranslateMessage(&msg);
#043?????????????? DispatchMessage(&msg);
#044???????? }
#045??}
#046?
#047??return (int) msg.wParam;
#048?}
#049?
?
42 行是调用函数 TranslateMessage 作消息转换工作。?

再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读