设置对话框窗口的“默认按钮”方法

来源:互联网 发布:破解版软件是什么意思 编辑:程序博客网 时间:2024/05/17 07:19

写这种文章实在是没有意义,本质上也就是一个翻译的工作,但是——为什么没人去做?为什么没人去做……怨念!

“默认按钮”的本质就是,我在任何一个控件上(没有指定哪一个控件)按下回车键,会自动认为点击了某一个按钮。

这是一种操作上的方便,与此同时有一些显示上的效果,比方说当焦点在某一个控件上时,默认按钮周围有一圈加深(98风格的按钮是黑色加深,xp是蓝色的)。

如果想找个例子,可以看一下“我的电脑”->“属性”里面的“确定”按钮!这种实现方式是无法模拟出来的,除非你重写按钮的绘制,重写所有组件的回车事件!

其实windows是有支持的,但是不知道为啥谷歌出来的结果很让人失望,比如这个:http://bbs.csdn.net/topics/280069252,结论居然是模拟!

搜一下英文(Default Button)结果马上就出来了:http://msdn.microsoft.com/en-us/library/windows/desktop/bb775941(v=vs.85).aspx


以上都是废话,重点是实现方法,就一句:::SendMessage(hwndDlg, DM_SETDEFID, (WPARAM)ID_BUTTON, (LPARAM)0);

“An application can also use the DM_GETDEFID message to retrieve the identifier of the default push button control in a dialog box. An application can use the DM_SETDEFID message to set the default push button for a dialog box.”

文章里面写清楚了,对“dialog box”发送一条DM_SETDEFID的消息,再点开这个消息的介绍,第一参数是控件ID,第二参数没用。

什么意思呢,我发消息发送给的不是按钮,而是对话框窗口!!

也即(以下是实现上的猜测),每一个对话框窗口会记录一个按钮子窗口(或者子窗口的ID)作为其“默认按钮”,这个默认按钮的值会影响一系列的行为,如当回车事件通过消息路由传到对话框时,对话框发送一条BM_CLICK消息给子控件以触发通知(WM_COMMAND消息),对话框自动更新这个“默认按钮”的显示风格等等。最重要的是,默认按钮只有一个!

其他的一些功能或者行为大家自己猜都能猜出来,我就不说了,废话太多请勿介意。

原创粉丝点击