Windows消息的转换

windows api 中的几个消息转换函数: 

1、TranslateAccelerator

函数原型:

int TranslateAcceleratorW(
  [in] HWND   hWnd,
  [in] HACCEL hAccTable,
  [in] LPMSG  lpMsg
);

当应用程序运行时,用户按下快捷键,这样就产生了一个按键消息,那么 Windows 是怎么样把它转化为快捷键响应的消息呢?这就需要使用 TranslateAccelerator 函数。 TranslateAccelerator 函数主要的作用就是把消息跟快捷键表(通过::LoadAccelerators函数加载到进程中)里定义的按键组合进行比较,如果发现有快捷键,就会把这个按键消息转换为 WM_COMMAND 或者 WM_SYSCOMMAND 消息给hWnd对应的窗口消息处理函数发送过去。然后将WM_COMMAND或WM_SYSCOMMAND消息直接送到相应的窗口处理过程。TranslateAccelerator直到窗口过程处理完消息后才返回。

2、IsDialogMessage

函数原型:

BOOL IsDialogMessageW(
  [in] HWND  hDlg,
  [in] LPMSG lpMsg
);

IsDialogMessage不仅用来检查对话框消息的,当消息是给这个对话框的,则要转换并处理这个消息。更贴切的名字应该是TranslateDialogMessage。IsDialogMessage解释非模态对话框消息(虽然这个函数是针对非模式对话框设计的,但是你也可以在任何包含控件的窗口中使用,使窗口具备相同的键盘选择控件能力)。例如当按下tab时选择下一个控件或控件组,当按下down时选择控件组内的下一个控件。因为IsDialogMessage 函数要执行消息所有必要的消息转换和消息分发,IsDialogMessage函数处理的消息不必传送给TranslateMessage或 DispatchMessage函数处理。 IsDialogMessage函数把WM_GETDLGETDLGCODE发送到对话框应用程序,决定应该处理哪个键。 lsDialogMessage函数把DM_GETDEFID和DM_SETDEFID消息发送到窗口,获得默认按钮的ID号。

3、TranslateMessage

函数原型:

BOOL TranslateMessage(
  [in] const MSG *lpMsg
);

当我们敲击键盘上的某个键时,系统将向窗口发送WM_KEYDOWN和WM_KEYUP 击键消息。这两个消息的附加参数( wParam和 lParam)包含的是 虚拟键代码和扫描码等信息。对于可显示字符的击键操作,TranslateMessage将按键消息转换为字符消息,如Shift+a 转换为大写A字符。并将转换后的新消息投递到调用线程的消息队列中。新增加的消息为WM_CHAR(该消息的wParam附加参数包含了字符的ASCII码)。TranslateMessage会发现消息里是否有字符键的消息,如果有字符键的消息,并发送WM_CHAR消息,如果没有就不会产生任何消息。例如,按下Shift 键,再按下 a键,然后释放a键,最后松开Shift键,将产生以下消息序列:

大写字符A产生的消息
消息键或代码
WM_KEYDOWN虚拟键码VK_SHIFT
WM_KEYDOWNA的虚拟键码
WM_CHAR“A”的字符代码
WM_KEYUPA的虚拟键码
WM_KEYUP虚拟键码VK_SHIFT

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值