VC 程序中定制对话框中的回车键
来源:互联网 发布:西门子plc200编程100例 编辑:程序博客网 时间:2024/06/01 09:22
基于对话框的程序中,每当用户按下回车键时,程序都会退出,其效果和按下对话框中的默认"OK"按钮是一样的,即使去掉"OK"按钮的
BS_DEFPUSHBUTTON属性也没用。那么如何定制回车键的行为呢?
要解决问题,必须搞清楚背后所发生的一切,在 Spy++ 中可以看到,当用户按下回车键时,Windows发送一个特殊的 DM_GETDEFID 消息来获得缺省的命令ID,Windows再将它作为 WM_COMMAND 发送。所以,我们要做的就是重载 DM_GETDEFID 消息。
在有关 Windows 的文档中是这样描述 DM_GETDEFID 返回值的:"如果有缺省的按钮,则返回值的高位字包含 DC_HASDEFID,低位字包含控制的标识符。否则,返回值是零"。根据这段描述,假设如果没有缺省得按钮,则返回值应该是零。如果想要 disable 缺省的 ID,必须在低位字中返回0,在高位字中返回 DC_HASDEFID,。因此定义和实现消息映射函数如下:
BEGIN_MESSAGE_MAP(CMyDlg, CDialog) ON_MESSAGE(DM_GETDEFID, OnGetDefID) ...END_MESSAGE_MAP()LRESULT CMyDlg::OnGetDefID(WPARAM wp, LPARAM lp) { return MAKELONG(0, DC_HASDEFID); }
因为 MFC 没有对应 DM_GETDEFID 的宏,你必须使用通用的 ON_MASSAGE 宏。这样用户可以随意按回车键,但什么事都不会发生。
附:MSDN 的解释:
DM_GETDEFID message
Parameters
- wParam
This parameter is not used and must be zero.
- lParam
This parameter is not used and must be zero.
Return value
If a default push button exists, the high-order word of the return value contains the valueDC_HASDEFID and the low-order word contains the control identifier. Otherwise, the return value is zero.
Remarks
The DefDlgProc function processes this message.
注:本文参考:http://www.cnblogs.com/MayGarden/archive/2010/12/29/1920949.html
- VC程序中定制对话框中的回车键
- VC程序中定制对话框中的回车键
- VC程序中定制对话框中的回车键
- VC 程序中定制对话框中的回车键
- 如何定制对话框中的回车键
- 如何定制对话框中的回车键
- 如何定制对话框中的回车键
- 如何定制对话框中的回车键
- 如何定制对话框中的回车键
- 如何定制对话框中的回车键(转)
- 用vc编写对话框程序,点回车键,对话框消失的解决办法
- VC里基于对话框的程序屏蔽回车键自动退出程序
- VC里基于对话框的程序屏蔽回车键自动退出程序
- VC里基于对话框的程序屏蔽回车键和ESC自动退出程序
- VC++中定制个性化的对话框窗口类
- VC更改对话框程序中的APPNAME
- VC++中回车键不能换行
- VC中控件处理回车键
- 基于oracle restart的单实例SRVCTL使用详解
- chromium tarball编译步骤
- 让非Text输入类控件响应键盘弹出以及键盘输入——电子记分牌
- hdu 4651(求整数的组合数,五边形定理)
- 四招教你给微软Word文档减减肥【xpghost】
- VC 程序中定制对话框中的回车键
- java poi excel 读取大数据
- Oracle 分区表 总结
- 'ADB server didn't ACK'的解决办法
- 利用oracle 快照dblinks 解决数据库表同步问题
- 解决iOS报错libc++abi.dylib handler threw exception
- POJ-2975-Nim
- 直接拿来用,10个PHP代码片段
- git patch相关