如何在对话框中设置默认焦点
2009-05-02 14:20
561 查看
不记得哪天 有个同事问我设置对话框的默认焦点,我试了好几次都不成功 ,后来还是老老实实的用vc的 tabstop
其实 ,当时我想用setfocus来设置焦点的方法是对的,只是使用的地方不对 。
“对话框程序不接收WM_CREAT消息,而是在特殊的WM_INITDIALOG消息处理期间,对话框程序执行初始化操作。
WM_INITDIALOG消息是对话框接收到的第一个消息,这个消息只发送给对话框程序。如果对话框程序传回TRUE,那么Windows将输入焦点设定给对话框中第一个具有
WS_TABSTOP样式的子窗口控件。另外,对话框程序也可以在处理WM_INITDIALOG时使用SetFocus来将输入焦点设定为对话框中的某个子窗口控件,然后传回FALSE。
此外,对话框程序只处理WM_COMMAND消息。这是当按键被鼠标点中,或者在按钮具有输入焦点的情况下按下空格键时,按键控件发送给其父窗口的消息。这
个控件的ID(我们在对话框模板中将其设定为IDOK)在wParam的低字组中。对于这个消息,对话框过程调用EndDialog,它告诉
Windows清除对话框。对于所有其它消息,对话框程序传回FALSE,并告诉Windows内部的对话框窗口消息处理程序:我们的对话框程序不处理这些消息。
模态对话框的消息不通过您程序的消息队列,所以不必担心对话框中键盘快捷键的影响。”
这是网上找到的一个说明,明显在WM_CREATE中做这个是不明智的,改在 WM_INITDIALOG中处理就可以了
其实 ,当时我想用setfocus来设置焦点的方法是对的,只是使用的地方不对 。
“对话框程序不接收WM_CREAT消息,而是在特殊的WM_INITDIALOG消息处理期间,对话框程序执行初始化操作。
WM_INITDIALOG消息是对话框接收到的第一个消息,这个消息只发送给对话框程序。如果对话框程序传回TRUE,那么Windows将输入焦点设定给对话框中第一个具有
WS_TABSTOP样式的子窗口控件。另外,对话框程序也可以在处理WM_INITDIALOG时使用SetFocus来将输入焦点设定为对话框中的某个子窗口控件,然后传回FALSE。
此外,对话框程序只处理WM_COMMAND消息。这是当按键被鼠标点中,或者在按钮具有输入焦点的情况下按下空格键时,按键控件发送给其父窗口的消息。这
个控件的ID(我们在对话框模板中将其设定为IDOK)在wParam的低字组中。对于这个消息,对话框过程调用EndDialog,它告诉
Windows清除对话框。对于所有其它消息,对话框程序传回FALSE,并告诉Windows内部的对话框窗口消息处理程序:我们的对话框程序不处理这些消息。
模态对话框的消息不通过您程序的消息队列,所以不必担心对话框中键盘快捷键的影响。”
这是网上找到的一个说明,明显在WM_CREATE中做这个是不明智的,改在 WM_INITDIALOG中处理就可以了
相关文章推荐
- MFC对话框初始化函数是在哪里?以及如何为MFC的EDIT控件设置默认显示值?
- 如何重置Visual Stuido的“选择默认环境设置”对话框?
- C#中如何设置默认按钮
- windows:如何将chrome设置为默认浏览器
- VS里面如何设置环境默认的开发语言
- 在Qt中如何为对话框(控件)设置背景?
- 如何设置让 Org Mode 在默认情况下,不转义 _ 字符呢?
- 如何将datetimepicker默认设置为空?
- 如何用vb设置默认打印机?
- 将默认的Netbeans中文版设置为英文界面/如何将Netbeans 6.5设置为英文界面
- 谷歌浏览器如何重置?谷歌浏览器恢复默认设置?
- Android设置EditText默认无焦点
- .net中如何设置默认浏览器
- Word2010中如何设置多级编号 把默认标题的样式设置为带有多级编号
- VC如何设置默认的调试程序
- Win7和Win8并存时如何设置Windows7为默认启动项
- C#如何设置电脑的默认打印机?
- winform 中设置窗体的默认焦点
- 如何删除CPropertySheet 类派生生成的标签对话框上的默认按钮 “确定”“取消”“删除”
- Mac下如何设置Eclipse默认浏览器为chrome