Domanda

Quando eseguo una vecchia applicazione MFC nel debugger di Visual Studio ho visto molti avvisi nella finestra Output come il seguente:

  

Avviso: saltare il pulsante non di opzione nel gruppo.

Capisco che in MFC metti i pulsanti di opzione in gruppi per indicare quali gruppi di pulsanti di opzione vanno insieme. Se ricordo bene, lo fai impostando il " gruppo " proprietà del primo pulsante di opzione su true, quindi imposta il resto dei pulsanti di opzione " gruppo " proprietà su false.

Ho tre domande su questo avviso.

  1. Come si elimina questo avviso? Fare devi impostare il " gruppo " proprietà di tutti i pulsanti non di opzione controllano su true evitatelo o dovreste semplicemente impostarlo per il primo controllo dopo il ultimo pulsante di opzione?

  2. C'è un modo semplice per capire quali controlli o finestre di dialogo hanno questo problema? Potrei aprire ogni finestra di dialogo e giocherellare con esso fino all'avvertimento si apre. Questa applicazione ha molti dialoghi però, così sarebbe bello se ci fosse un modo più semplice.

  3. Quale comportamento negativo può verificarsi se non aggiusti questo avviso? In altro parole, importa?

È stato utile?

Soluzione

L'avvertimento indica che esiste un controllo diverso da un pulsante di opzione nell'ordine di tabulazione tra il primo e l'ultimo pulsante di opzione nel gruppo. Un controllo con lo stile WS_GROUP segna l'inizio di un gruppo.

Per risolvere questo problema, utilizzare l'editor delle finestre di dialogo per modificare l'ordine delle schede e assicurarsi che tutti i pulsanti di opzione siano numerati in sequenza. Un altro modo per farlo sarebbe quello di aprire il file .rc in un editor di testo e modificare l'ordine delle istruzioni all'interno di ciascuna risorsa della finestra di dialogo (l'ordine delle schede è semplicemente definito dall'ordine in cui sono elencati i controlli).

Penso che puoi tranquillamente ignorare questo avviso, a condizione che il raggruppamento dei pulsanti di opzione funzioni correttamente.

Altri suggerimenti

Tra le risposte qui e alcune ricerche nei vecchi forum penso di aver capito almeno come risolvere i miei problemi. Ecco cosa ho scoperto per le mie domande precedenti.

  1. ChrisN e Smashery mi hanno suggerito di riordinare le schede per assicurarmi che i pulsanti di opzione siano ordinati in sequenza e questo ha risolto alcuni degli avvisi.

    Inoltre, il primo controllo nell'ordine di tabulazione dopo il gruppo di pulsanti di opzione deve avere la proprietà WS_GROUP impostata (o la proprietà del gruppo impostata su true nell'editor). Ciò indica a MFC che il gruppo di pulsanti di opzione è terminato. Senza di esso tutti i controlli rimanenti nell'ordine di tabulazione fino al prossimo WS_GROUP genererà l'avviso. Dopo aver fatto entrambe queste cose, gli avvisi in queste finestre di dialogo sono scomparsi.

  2. Questa è ancora una domanda aperta, non ho trovato un buon modo per individuare questi problemi senza aprire ogni finestra di dialogo e attendere avvisi.

    Se sai che una finestra di dialogo sta creando questo avviso ma non sai quale controllo lo sta causando, puoi impostare un punto di interruzione nella funzione DDX_Radio () sulla chiamata TRACE () che genera l'avviso. Ciò può semplificare l'identificazione del controllo specifico di cui ci si lamenta.

  3. Sono d'accordo con ChrisN, non riesco a pensare a nessun motivo per questo avviso se non quello di farti ricontrollare il tuo ordine di tabulazione. Altrove online non trovo altri riferimenti a un problema che ciò potrebbe causare.

Forse controlla il tuo ordine di tabulazione (Formato / Tab Order) - sembra che tu abbia un pulsante normale nel mezzo di un gruppo di pulsanti di opzione. Se davvero questo è il problema, puoi risolverlo usando la voce di menu Formato / Ordine tab, quindi facendo clic sui controlli nell'ordine corretto.

Per il punto 2, motivo per cui suppongo che tu stia mantenendo questo senza risposta, non posso immaginare nulla di più semplice quindi fare una ricerca di testo (* .rc) per tutte le finestre di dialogo con i pulsanti di opzione. Per ogni hit, ispeziona visivamente il codice risorsa per questo problema e correggilo. Lo farei a mano nel sorgente del file di risorse invece di provare a giocare con il designer di gui.

Per quello che vale, avevo 3 pulsanti di opzione nell'ordine di tabulazione corretto (confermato nel file .rc senza problemi dopo) e ho ancora ricevuto un avviso. Il punto di interruzione in DDX_Radio ha mostrato che i pulsanti di 2a e 3a radio venivano segnalati come non radio! Ho cercato in resource.h e ho scoperto il primo pulsante di opzione usando ID 1313 e altri due usando 1311 e 1312. Mettili nell'ordine di tab desiderato e rinumerati gli ID per adattarli e risolvere il problema. Indovina GetWindow GW_HWNDNEXT è in qualche modo collegato nell'ordine ID non nell'ordine Tab, anche se il gruppo radio ha funzionato. Nota: uso ancora Visual C ++ v6

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top