0

I am working on this popup dialog and I am at the design stage:

Screen shot

I have three tristate checkboxes at the top and three group boxes with 4 checkboxes in each. The concept is simple:

  • If all 4 check boxes are ticked then the master checkbox is ticked.
  • If none of them are ticked then the master one is untickd.
  • If only 1 to 3 of them are ticked then the master one is set to intermediatery.

The user will be able to tick the master check box to bulk switch on all off all the associated checkboxes.

My question relates to the 3 static group boxes. I want those three lables changed into the 3 tri-state checkboxes as it will look nicer. When I played with WPF i had full control over how the labels looked for groupboxes but whatabout here in a MFC project?

This is the resource in my test project:

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

Update

One posibility is to adjust the design style like this:

Version 2

That is quite clear and avoids the need for a checkbox as the label of the group box. But I would prefer the original approach if at all possible.

Update

Looking at this answer I cameup with a solution:

Version 3

Andrew Truckle
  • 17,769
  • 16
  • 66
  • 164
  • 1
    Possible duplicate of [Group box with title as Check box](https://stackoverflow.com/questions/1047951/group-box-with-title-as-check-box) – Andrew Truckle Jul 05 '18 at 16:13
  • 1
    You should also set `WS_CLIPSIBLINGS` for both the group boxes and the checkboxes. Otherwise there may be drawing errors (e. g. group box painting over checkbox) even if the z-order is correct. – zett42 Jul 06 '18 at 09:22
  • @zett42 I can't see that setting in the IDE. Only for the dialog and not the controls. – Andrew Truckle Jul 06 '18 at 10:19
  • 1
    It is a child window style though (it doesn't make sense for top-level windows at all as the system handles overlapping top-level windows automatically). Use something like `GetDlgItem(IDC_MYCONTROL)->ModifyStyle(0,WS_CLIPSIBLINGS)`. – zett42 Jul 06 '18 at 10:28
  • 2
    Actually it should be enough to set `WS_CLIPSIBLINGS` for the group boxes only. After all, you *want* the checkboxes to draw over the group boxes. – zett42 Jul 06 '18 at 10:31

0 Answers0