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

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

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

这是一种操作上的方便,与此同时有一些显示上的效果,比方说当焦点在某一个控件上时,默认按钮周围有一圈加深(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消息),对话框自动更新这个“默认按钮”的显示风格等等。最重要的是,默认按钮只有一个!

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

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值