Pergunta

Ao executar um aplicativo MFC velho no depurador do Visual Studio Eu vi um monte de avisos na janela de saída como o seguinte:

Atenção:. Pular botão não-rádio no grupo

Eu entendo que no MFC você colocar botões de rádio em grupos para indicar quais conjuntos de botões de rádio caminham juntos. Se bem me lembro você fizer isso, definindo a propriedade "grupo" do primeiro botão de opção para true, em seguida, definir o resto do rádio botões propriedade "grupo" como falsa.

Eu tenho três perguntas sobre este aviso.

  1. Como você se livrar deste aviso? Faz você tem que definir a propriedade "grupo" de todos controles de botão não-rádio para true para evitar isso, ou você deve apenas definir -lo para o primeiro controlo após o último botão de rádio?

  2. Existe uma maneira fácil de figura o que controles ou caixas de diálogo tem esse problema? Eu poderia abrir cada caixa de diálogo e mexer com ele até que o aviso aparece. Esta aplicação tem um monte de diálogos, porém, isso seria bom se houvesse uma maneira mais fácil.

  3. O comportamento negativo pode ocorrer se você não corrigir esse aviso? em outra palavras, faz isso mesmo assunto?

Foi útil?

Solução

Os meios de alerta que há algum que não seja um botão de rádio na ordem de tabulação entre o primeiro eo último botões de opção no grupo de controle. Um controle com as marcas conjunto de estilo WS_GROUP o início de um grupo.

Para corrigir isso, use o editor de diálogo para alterar a ordem de tabulação e certifique-se que todos os botões de rádio são numerados sequencialmente. Outra maneira de fazer isso seria para abrir o arquivo .rc em um editor de texto e mudar a ordem das instruções dentro de cada recurso de diálogo (a ordem de tabulação é simplesmente definido pela ordem na qual os controles são listados).

Eu acho que você pode ignorar este aviso, desde que o botão de opção agrupamento está funcionando corretamente.

Outras dicas

Entre as respostas aqui e alguma pesquisa em fóruns de idade eu acho que eu descobri, pelo menos como corrigir meus problemas. Aqui está o que eu descobri em minhas perguntas acima.

  1. ChrisN e Smashery sugeriu que eu reordenar as guias para garantir que os botões de rádio são ordenadas sequencialmente, e isso fez fix alguns dos avisos.
    Além disso, o primeiro controle na ordem de tabulação após o grupo de botões de rádio deve ter o conjunto de propriedades WS_GROUP (ou a propriedade conjunto grupo a verdade no editor). Isto diz MFC que o grupo de botões de rádio terminou. Sem ele todos os controles restantes na ordem de tabulação até a próxima WS_GROUP irá gerar o aviso. Depois de fazer as duas coisas as advertências nestes diálogos foi embora.

  2. Esta é ainda uma questão em aberto, eu não encontrei uma boa maneira de localizar esses problemas sem abrir cada diálogo e à espera de avisos.
    Se você conhece um diálogo é criar este aviso, mas você não sabe o que o controle está causando isso, você pode definir um ponto de interrupção na função DDX_Radio () na chamada TRACE () que gera o aviso. Isso pode torná-lo mais fácil de identificar o controle específico que está sendo queixou-se.

  3. Eu concordo com ChrisN, eu não posso pensar em qualquer razão para isso a não ser para fazer com que você verifique a sua ordem de tabulação aviso. Em outros lugares on-line que não consigo encontrar qualquer outra referência a um problema que esta causa poder.

verificar Talvez a sua ordem de tabulação (Formato / Tab Order) - Parece que você tem um botão normal no meio de um grupo de botões de rádio. Se de fato esse é o problema, você pode corrigir isso usando o Formato / item de menu Ordem de tabulação e, em seguida, clicando sobre os controles na ordem correta.

Para o ponto 2, que é por isso que eu acho que você está mantendo esta sem resposta, eu não posso imagem nada simplier em seguida, fazer uma pesquisa de texto (* .rc) para todas as caixas de diálogo com botões de rádio. Para cada hit, inspecionar visualmente o código de recurso para este problema e corrigi-lo. Eu faria isso com a mão na fonte do arquivo de recursos vs. tentando jogar com o designer gui.

Por que vale a pena, eu tinha 3 botões de rádio em ordem de tabulação correta (confirmado em arquivo.rc sem problemas depois dela) e aviso ainda tem. Breakpoint no DDX_Radio mostrou que as 2ª e 3ª botões de rádio foram sendo relatados como não-rádio! Olhou em resource.h e descobriu 1º botão de rádio usando ID 1313 e outros dois usando 1311 e 1312. Coloque-as em ordem de tabulação desejado e renumerados os IDs de terno e problema resolvido. Adivinhe a GetWindow GW_HWNDNEXT está de alguma forma ligada a fim ID não fim Tab, embora grupo de rádio funcionou. Nota: ainda usando o Visual C ++ v6

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top