前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >windows api编程入门_WindowsAPI调用DLL

windows api编程入门_WindowsAPI调用DLL

作者头像
全栈程序员站长
发布2022-10-01 16:49:23
1K0
发布2022-10-01 16:49:23
举报

大家好,又见面了,我是你们的朋友全栈君。

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)) != 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://javaforall.cn/194550.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022年9月12日 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
消息队列 CMQ 版
消息队列 CMQ 版(TDMQ for CMQ,简称 TDMQ CMQ 版)是一款分布式高可用的消息队列服务,它能够提供可靠的,基于消息的异步通信机制,能够将分布式部署的不同应用(或同一应用的不同组件)中的信息传递,存储在可靠有效的 CMQ 队列中,防止消息丢失。TDMQ CMQ 版支持多进程同时读写,收发互不干扰,无需各应用或组件始终处于运行状态。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档