本文主要是介绍翻译《The Old New Thing》 - Double-clicking radio buttons,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Double-clicking radio buttons - The Old New Thing (microsoft.com)https://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 团队在这方面做得好多了。
这篇关于翻译《The Old New Thing》 - Double-clicking radio buttons的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!