МФЦ "Предупреждение: пропуск не-радио кнопки в группе." - PullRequest
10 голосов
/ 25 сентября 2008

При запуске старого приложения MFC в отладчике Visual Studio в окне «Вывод» я видел много предупреждений, например:

Предупреждение: пропуск не-радио кнопки в группе.

Я понимаю, что в MFC вы помещаете переключатели в группы, чтобы указать, какие наборы переключателей идут вместе. Если я правильно помню, вы делаете это, устанавливая для свойства «group» первого переключателя значение true, а затем для остальных свойств переключателей «group» значение false.

У меня есть три вопроса об этом предупреждении.

  1. Как избавиться от этого предупреждения? Делать Вы должны установить свойство "группа" всех не радио кнопки управления для истинного избегайте этого или просто установите это для первого контроля после последний переключатель?

  2. Есть ли простой способ понять какие элементы управления или диалоги имеют эту проблему? Я мог бы открыть каждый диалог и возиться с ним до предупреждения всплывает. Это приложение имеет много диалоги, хотя, так было бы хорошо, если бы был более простой способ.

  3. Какое негативное поведение может произойти, если Вы не исправили это предупреждение? В других слова, это вообще имеет значение?

Ответы [ 5 ]

10 голосов
/ 25 сентября 2008

Между ответами здесь и некоторыми исследованиями на старых форумах, я думаю, я понял, по крайней мере, как исправить мои проблемы. Вот то, что я выяснил для моих вышеупомянутых вопросов.

  1. ChrisN и Smashery предложили мне изменить порядок вкладок, чтобы убедиться, что переключатели упорядочены последовательно, и это действительно исправило некоторые предупреждения.

    Кроме того, первый элемент управления в порядке вкладок после группы переключателей должен иметь установленное свойство WS_GROUP (или для свойства группы в редакторе значение true). Это говорит MFC, что группа переключателей закончилась. Без него все остальные элементы управления в порядке табуляции до следующего WS_GROUP сгенерируют предупреждение. После выполнения этих двух действий предупреждения в этих диалоговых окнах исчезли.

  2. Это все еще открытый вопрос, я не нашел хорошего способа найти эти проблемы, не открывая каждое диалоговое окно и не ожидая предупреждений.

    Если вы знаете, что диалоговое окно создает это предупреждение, но не знаете, какой элемент управления вызывает его, вы можете установить точку останова в функции DDX_Radio () при вызове TRACE (), который генерирует предупреждение. Это может упростить идентификацию конкретного элемента управления, на который жалуются.

  3. Я согласен с ChrisN, я не могу думать ни о какой причине для этого предупреждения, кроме как заставить вас дважды проверить порядок табуляции. В другом месте онлайн я не могу найти никаких других ссылок на проблему, которая может это вызвать.

7 голосов
/ 25 сентября 2008

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

Чтобы исправить это, используйте редактор диалогов, чтобы изменить порядок вкладок и убедитесь, что все переключатели пронумерованы последовательно. Другой способ сделать это - открыть файл .rc в текстовом редакторе и изменить порядок операторов внутри каждого ресурса диалога (порядок табуляции просто определяется порядком, в котором перечислены элементы управления).

Я думаю, что вы можете спокойно проигнорировать это предупреждение, если группировка переключателей работает правильно.

1 голос
/ 25 сентября 2008

Возможно, проверьте ваш порядок вкладок (Format / Tab Order) - звучит так, как будто у вас есть нормальная кнопка в середине группы переключателей. Если это действительно проблема, вы можете исправить это, используя пункт меню «Формат / порядок вкладок», а затем щелкнув элементы управления в правильном порядке.

0 голосов
/ 13 июля 2018

Для чего бы это ни стоило, у меня было 3 переключателя в правильном порядке табуляции (подтверждено в файле .rc без проблем после него) и все еще получало предупреждение. Точка останова в DDX_Radio показала, что 2-я и 3-я радио-кнопки были зарегистрированы как не-радио! Заглянул в resource.h и обнаружил 1-ю кнопку-переключатель с использованием идентификатора 1313, а две другие - с использованием 1311 и 1312. Разместите их в нужном порядке табуляции и перенумеруйте идентификаторы в соответствии с требованиями и решенной проблемой. Полагаю, что GetWindow GW_HWNDNEXT каким-то образом связан в порядке идентификаторов, а не в порядке табуляции, даже если работала радиогруппа. Примечание: все еще использую Visual C ++ v6

0 голосов
/ 27 сентября 2008

Что касается пункта 2, поэтому я полагаю, что вы оставляете это без ответа, я не могу представить себе ничего проще, чем выполнить текстовый поиск (* .rc) для всех диалогов с переключателями. Для каждого попадания визуально проверьте код ресурса на предмет этой проблемы и исправьте его. Я бы сделал это вручную в источнике файла ресурсов, а не пытался играть с дизайнером графического интерфейса.

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