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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 批处理文件 – Windows CMD批处理:具有DelayedExpansion的
- windows-installer – 如何在Installshield 2018中添加发布
- windows-server-2008 – 使用1GB内存运行Windows Server 20
- windows-server-2003 – Windows Server SBS 2003中的磁盘配
- Microsoft如何决定在C#中使用static / member?
- Windows上的所有HTTP流量是否都通过HTTP.SYS?
- 在绑定到Image.Source时,Xaml如何创建字符串到BitmapImage值
- 如何在Windows上静态编译SDL游戏
- .net – mscordacwks.dll和mscorwks.dll混淆
- windows – “编辑”不是cmd.exe中的有效命令?
推荐文章
站长推荐
- windows – 如何拦截dll方法调用?
- 手把手教你win10家庭版升级win10专业版的最新密钥
- 获取简单的输入和渲染窗口(Hello Window)
- windows – 如何使用ghc编译GUI可执行文件?
- windows-server-2008 – 如何在Windows Server 2
- windows-services – 首先是TopShelf,Ninject和E
- 在Windows 8上使用PowerShell 2作为默认版本
- windows-7 – 为什么NTOSKRNL.exe IMAGE_MACHINE
- 窗口 – SETX不追加系统路径变量的路径
- Windows环境下的安装gcc(c语言环境)
热点阅读