Windows API一日一练(13)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//
#006int APIENTRY _tWinMain(HINSTANCE hInstance,
#007 HINSTANCE hPrevInstance,
#008 LPTSTR lpCmdLine,
#009 int nCmdShow)
#010{
#011UNREFERENCED_PARAMETER(hPrevInstance);
#012UNREFERENCED_PARAMETER(lpCmdLine);
#013
#014 //
#015MSG msg;
#016HACCEL hAccelTable;
#017
#018// 加载全局字符串。
#019LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
#020LoadString(hInstance, IDC_TESTWIN, szWindowClass, MAX_LOADSTRING);
#021MyRegisterClass(hInstance);
#022
#023// 应用程序初始化 :
#024if (!InitInstance (hInstance, nCmdShow))
#025{
#026 return FALSE;
#027}
#028
#029hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_TESTWIN));
#030
#031// 消息循环 :
#032BOOL bRet;
#033while ( (bRet = GetMessage(&msg, NULL, 0, 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
#047return (int) msg.wParam;
#048}
#049
42 行是调用函数 TranslateMessage 作消息转换工作。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值