Как сделать флажок MFC доступным только для чтения, но оставить текст включенным? - PullRequest
3 голосов
/ 18 марта 2010

Кажется, что отключение флажка через свойство Disabled также затеняет заголовок. Кто-нибудь знает, как оставить подпись включенной, но отключить ввод?

EDIT

Основываясь на идее Пола, я сделал следующее (теперь я понял, что статическая метка и флажок имеют свойство прозрачности).

  1. Добавлена ​​пара флажков.
  2. Установить заголовки флажка на ничего.
  3. Установите для свойства прозрачности флажка значение true.
  4. Добавьте пару ярлыков рядом с флажком.
  5. Изменить прозрачное свойство меток на true.
  6. Разверните флажки, чтобы охватить метку (поэтому нажатие на метку вызовет изменение флажка).

Но это дает мне очень странные результаты. Когда я расширяю флажок над ярлыком, он закрывает ярлык, хотя оба прозрачны. Опять же, я новичок в MFC (я парень на C #), поэтому, может быть, я что-то упустил.

Ответы [ 5 ]

3 голосов
/ 13 октября 2011

Просто используйте свойство Auto и не проверяйте его.

Если щелкнуть по нему, он больше не будет переключаться, поэтому в основном он будет доступен только для чтения, но все равно будет нормально работать как вывод.

Флажок Свойства: Стили Авто Создает флажок, который при выбранный, автоматически переключается между проверенным и непроверенным состояниями. Вы должны установить для этого свойства значение True, если вы используете группу проверки коробки с диалогом обмена данными.

Type: Bool, Default: True.

3 голосов
/ 07 октября 2010

Просто переопределите событие onClick и установите флажок обратно в прежнее состояние.

void CMyDialog::OnBnClickedMyCheckBox()
{
    m_myCheckBox.SetCheck(!m_myCheckBox.GetCheck());    
}
2 голосов
/ 18 марта 2010

Быстрый и простой обходной путь - не использовать текстовый элемент флажка (установите его в «»), уменьшите размер флажка до квадрата с возможностью щелчка и просто поместите метку рядом с флажком.

Чтобы немного повеселиться, вы можете создать собственный элемент управления, в котором размещены флажок и метка, позволяющая использовать его повторно. Это также будет более простым способом заставить пользовательский флажок вести себя так, как ожидается для конечного пользователя, например. возможность установить флажок выбранным или отмененным при щелчке метки, а также сам флажок. (Простое решение не будет автоматически связывать метку и флажок. Вы можете закодировать это внутри формы, но это может стать ужасно быстрым, если вы склонны повторно использовать эту парадигму.)

Вы также можете поискать сторонний элемент управления флажками (существует множество библиотек пользовательского интерфейса MFC), но это может быть излишним.

См. Этот псевдо-макет:

У вас есть это: (одинокий флажок управления)

[x "checkbox text"]

Выложите это так: (элемент управления меткой выровнен прямо рядом с флажком)

[x][label: "label text"]

Обрабатывать событие метки, на которое нажали, что-то вроде:

void OnLabelClick(...) {
    if (checkBox.Enabled)
        checkBox.Checked = !checkBox.Checked;
}
0 голосов
/ 01 декабря 2011
void SetCheckBoxReadOnly(CButton* i_checkBox, bool i_readOnly)
{
    if (!i_checkBox)
    {
        return;
    }

    // Clear/set "Auto" property
    if (i_readOnly)
    {
        i_checkBox->ModifyStyle(BS_AUTOCHECKBOX, BS_CHECKBOX);
    }
    else
    {
        i_checkBox->ModifyStyle(BS_CHECKBOX, BS_AUTOCHECKBOX);
    }

    // Set a grey background for check square - looks like disabled :)
    i_checkBox->SetState(i_readOnly ? TRUE : FALSE);
}
0 голосов
/ 18 марта 2010

Вы можете снять флажок в функции щелчка, если не существует другого условия.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...