三态复选框作为MFC对话框中GroupBox元素的标签

时间:2018-07-05 14:54:27

标签: checkbox mfc groupbox

我正在处理此弹出对话框,而我正在设计阶段:

Screen shot

我在顶部有三个三态复选框,在三个组框中各有4个复选框。这个概念很简单:

  • 如果所有4个复选框均被选中,则主复选框被选中。
  • 如果未勾选任何一个,则取消选中第一个。
  • 如果仅对其中的1到3进行打勾,则将主1设置为中间人。

用户将能够选中主复选框,以将所有关联的复选框全部关闭。

我的问题与3个静态分组框有关。我希望将这三个标签更改为3个三态复选框,因为它看起来会更好。当我使用WPF时,我完全可以控制标签如何查找组框,但是在MFC项目中呢?

这是我的测试项目中的资源:

IDD_MFCAPPLICATION4_DIALOG DIALOGEX 0, 0, 309, 184
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
EXSTYLE WS_EX_APPWINDOW
CAPTION "Assignment Slips"
FONT 8, "MS Shell Dlg", 0, 0, 0x1
BEGIN
    DEFPUSHBUTTON   "OK",IDOK,199,163,50,14
    PUSHBUTTON      "Cancel",IDCANCEL,252,163,50,14
    CONTROL         "Main hall",IDC_CHECK1,"Button",BS_AUTO3STATE | WS_TABSTOP,18,7,43,10
    GROUPBOX        "Main hall",IDC_STATIC,7,23,94,82
    CONTROL         "Bible Reading",IDC_CHECK2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,17,38,59,10
    CONTROL         "Initial Call",IDC_CHECK3,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,17,53,47,10
    CONTROL         "First Return Visit",IDC_CHECK4,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,17,67,69,10
    CONTROL         "Bible Study",IDC_CHECK5,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,17,82,51,10
    GROUPBOX        "Aux. Class 1",IDC_STATIC,107,23,94,82
    CONTROL         "Bible Reading",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,117,38,59,10
    CONTROL         "Initial Call",IDC_CHECK7,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,117,53,47,10
    CONTROL         "First Return Visit",IDC_CHECK8,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,117,67,69,10
    CONTROL         "Bible Study",IDC_CHECK9,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,117,82,51,10
    GROUPBOX        "Aux. Class 2",IDC_STATIC,207,23,94,82
    CONTROL         "Bible Reading",IDC_CHECK10,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,217,39,59,10
    CONTROL         "Initial Call",IDC_CHECK11,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,217,53,47,10
    CONTROL         "First Return Visit",IDC_CHECK12,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,217,68,69,10
    CONTROL         "Bible Study",IDC_CHECK13,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,217,82,51,10
    GROUPBOX        "Other",IDC_STATIC,7,108,94,69
    CONTROL         "Opening Prayer",IDC_CHECK14,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,17,126,66,10
    CONTROL         "Closing Prayer",IDC_CHECK15,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,17,141,62,10
    CONTROL         "Aux. Class 1",IDC_CHECK18,"Button",BS_AUTO3STATE | WS_TABSTOP,117,7,56,10
    CONTROL         "Aux. Class 2",IDC_CHECK19,"Button",BS_AUTO3STATE | WS_TABSTOP,217,7,56,10
    CONTROL         "Congregation Bible Study",IDC_CHECK16,"Button",BS_AUTOCHECKBOX | BS_TOP | BS_MULTILINE | WS_TABSTOP,17,156,76,17
END

更新

一种可能性是像这样调整设计风格:

Version 2

这很清楚,并且避免了需要复选框作为组框的标签。但是,如果可能的话,我宁愿使用原始方法。

更新

看着这个answer,我想出了一个解决方案:

Version 3

0 个答案:

没有答案