翻译《The Old New Thing》 - Double-clicking radio buttons

news/2024/10/21 23:27:00/

Double-clicking radio buttons - The Old New Thing (microsoft.com)icon-default.png?t=N7T8https://devblogs.microsoft.com/oldnewthing/20050804-10/?p=34713

Raymond Chen 在 2005年08月04日


让对话框单选按钮支持双击确定

提示

本文提供了一种让对话框窗口上的控件支持双击确定窗口返回的方法

正文

        为你的对话框增加一丝精致感,可以通过支持双击单选按钮作为“选择 + 确定”的快捷方式。

( 如果页面是向导的一部分,则为“选择 + 下一步”或“选择 + 完成”。)

        考虑以下对话框模板

1 DIALOGEX DISCARDABLE  32, 32, 200, 76
STYLE DS_MODALFRAME |  WS_POPUP |WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION “Sample”
FONT 8, “MS Shell Dlg”
BEGINLTEXT “A mumbler is needed.”,-1,7,8,100,10AUTORADIOBUTTON “Do not &obtain a mumber now”,100,17,24,180,10AUTORADIOBUTTON “Obtain a mumbler auto&matically”,101,17,34,180,10AUTORADIOBUTTON “&Enter mumbler manually”,102,17,44,180,10DEFPUSHBUTTON “OK”,IDOK,92,58,50,14PUSHBUTTON “Cancel”,IDCANCEL,146,58,50,14
END

        和相关的对话框过程:

INT_PTR CALLBACK DlgProc(HWND hdlg, UINT uMsg,WPARAM wParam, LPARAM lParam)
{switch (uMsg) {case WM_INITDIALOG:CheckRadioButton(hdlg, 100, 102, 100);return TRUE;case WM_COMMAND:switch (GET_WM_COMMAND_ID(wParam, lParam)) {case IDOK:for (int i = 100; i <= 102; i++) {if (IsDlgButtonChecked(hdlg, i)) EndDialog(hdlg, i);}break;case IDCANCEL:EndDialog(hdlg, -1);break;}}return FALSE;
}

         这是一个相当标准的、没什么特别的对话框,要求用户从列表中选择一个选项。注意,双击单选按钮并不做任何特别的事情。我们可以修复这一点。

1 DIALOGEX DISCARDABLE  32, 32, 200, 76
STYLE DS_MODALFRAME |  WS_POPUP |WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION “Sample”
FONT 8, “MS Shell Dlg”
BEGINLTEXT “A mumbler is needed.”,-1,7,8,100,10AUTORADIOBUTTON “Do not &obtain a mumber now”,100,17,24,180,10,BS_NOTIFYAUTORADIOBUTTON “Obtain a mumbler auto&matically”,101,17,34,180,10,BS_NOTIFYAUTORADIOBUTTON “&Enter mumbler manually”,102,17,44,180,10,BS_NOTIFYDEFPUSHBUTTON “OK”,IDOK,92,58,50,14PUSHBUTTON “Cancel”,IDCANCEL,146,58,50,14
END

 

INT_PTR CALLBACK DlgProc(HWND hdlg, UINT uMsg,WPARAM wParam, LPARAM lParam)
{switch (uMsg) {case WM_INITDIALOG:CheckRadioButton(hdlg, 100, 102, 100);return TRUE;case WM_COMMAND:switch (GET_WM_COMMAND_ID(wParam, lParam)) {case IDOK:for (int i = 100; i <= 102; i++) {if (IsDlgButtonChecked(hdlg, i)) EndDialog(hdlg, i);}break;case IDCANCEL:EndDialog(hdlg, -1);break;case 100:case 101:case 102:if (GET_WM_COMMAND_CMD(wParam, lParam) == BN_DBLCLK) {EndDialog(hdlg, GET_WM_COMMAND_ID(wParam, lParam));}break;}}return FALSE;
}

        我们在单选按钮上添加了 BS_NOTIFY 样式,这启用了扩展通知(除了 BN_CLICKED 之外的所有通知)。当我们收到一个指定操作为 BN_DBLCLK 的单选按钮的 WM_COMMAND 消息时,我们自动点击确定按钮。(对于向导,我们将根据情况自动点击下一步或完成按钮。)

        请注意,双击作为选择和确定的快捷方式应该只用于只有单选按钮(和确定和取消按钮)的对话框或向导页面。如果页面上有除单选按钮之外的其他控件,那么你必须等待用户确定,因为他可能想操作其他控件。

        如果对话框上只有列表框或列表视图,而用户被要求从中选择一个项目,那么这个“双击意味着选择和确定”的快捷方式也可以使用。如果用户双击列表中的一个项目,将其视为选择和确定。

        资源管理器中的对话框对双击单选按钮的支持相当不一致。Office 和 Money 团队在这方面做得好多了。


http://www.ppmy.cn/news/1457801.html

相关文章

java 语言写一个装饰器模式代码

装饰器模式&#xff08;Decorator Pattern&#xff09;允许你动态地给一个对象添加一些额外的职责。就增加功能来说&#xff0c;装饰器模式相比生成子类更为灵活。下面是一个简单的 Java 装饰器模式的示例代码&#xff1a; 首先&#xff0c;我们定义一个接口 Component&#x…

STM32快速入门(定时器之输入捕获)

STM32快速入门&#xff08;定时器之输入捕获&#xff09; 前言 本节主要讲解STM32利用通用定时器&#xff0c;在输入引脚出现指定电平跳变时&#xff0c;将CNT的值锁存到CCR寄存器当中&#xff0c;从而计算PWM波形的频率、占空比、脉冲间隔、电平持续时间等。其功能的应用有&…

集成集成集成

模型环境全要在我电脑上配一遍 团雾&#xff1a; 报错&#xff1a;Torch not compiled with CUDA enabled看这一篇就足够了-CSDN博客 Torch not compiled with CUDA enabled问题解决过程记录-CSDN博客 NVDIA GPU Computing Toolkit&#xff08;即CUDA Toolkit&#xff09; …

ListNode.__lt__ = lambda a, b: a.val < b.val进行堆排序的比较

在Python中&#xff0c;如果你想让自定义的数据类型&#xff08;如链表节点ListNode&#xff09;能够用于堆排序&#xff0c;并且希望这些节点能够基于某个属性&#xff08;比如节点的值val&#xff09;进行排序&#xff0c;你需要为这个数据类型实现比较方法。 在你的例子中&…

Leetcode274

题目 274. H 指数 思路 题目有点绕&#xff0c;最开始就想到了对数组进行排序&#xff0c;那就可以通过下标来得到有多少篇论文的引用大于等于当前论文的引用&#xff0c;如果大于了当前论文的引用量则将当前论文的引用量更新为h值。后面考虑到[3,3]这种情况&#xff0c;也就是…

CSS选择器(基本+复合+伪类)

目录 CSS选择器 基本选择器 标签选择器&#xff1a;使用标签名作为选择器->选中同名标签设置样式 类选择器&#xff1a;给类选择器定义一个名字.类名&#xff0c;并给标签添加class"类名" id选择器&#xff1a;跟类选择器非常相似&#xff0c;给id选择器定义…

实现一个聊天室可发送消息语音图片视频表情包(任意文件)

文章目录 如何跑通代码仓库地址客户端登录发送消息接受消息发送文件接受文件 服务端接受消息并发送给各个客户端接受文件并发送给各个客户端 如何跑通 将手机和电脑都连自己的热点先运行服务器得到可监听的地址更新客户端安卓消息线程和文件线程的socker目标地址为可监听地址然…

SQL语句的执行处理

一、SQL语句的执行处理模式 SQL语句的执行处理模式分为两种&#xff1a;即时SQL&#xff08;Immediate Statements&#xff09;和预处理SQL&#xff08;Prepared Statements&#xff09; 二、即时SQL 1、定义 动态的根据传入的参数拼接SQL语句并执行&#xff0c;一条语句经过M…