Предупреждение MFC“:пропуск кнопки, не являющейся переключателем, в группе.”

StackOverflow https://stackoverflow.com/questions/130496

  •  02-07-2019
  •  | 
  •  

Вопрос

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

Предупреждение:пропуск кнопки, не являющейся переключателем, в группе.

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

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

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

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

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

Это было полезно?

Решение

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

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

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

Другие советы

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

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

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top