Tisttate CheckBoxes как метки для элементов GroupBox в диалоге MFC - PullRequest
0 голосов
/ 05 июля 2018

Я работаю над этим всплывающим диалоговым окном, и я нахожусь на стадии разработки:

Screen shot

У меня три верхних флажка и три групповых с четырьмя флажками в каждом. Концепция проста:

  • Если отмечены все 4 флажка, установлен главный флажок.
  • Если ни один из них не отмечен, то главный не снимается.
  • Если отмечены только от 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

Это вполне понятно и позволяет избежать необходимости в флажке в качестве метки группового поля. Но я бы предпочел оригинальный подход, если это вообще возможно.

Обновление

Глядя на этот ответ Я пришел с решением:

Version 3

...