10

Visual Studio のデバッガーで古い MFC アプリケーションを実行すると、出力ウィンドウに次のような多くの警告が表示されます。

警告: グループ内の非ラジオ ボタンをスキップしています。

MFC では、ラジオ ボタンをグループに分けて、どのラジオ ボタンのセットが一緒になるかを示すことを理解しています。私の記憶が正しければ、最初のラジオ ボタンの「グループ」プロパティを true に設定してから、残りのラジオ ボタンの「グループ」プロパティを false に設定します。

この警告について 3 つの質問があります。

  1. どうすればこの警告を取り除くことができますか? これを回避するには、ラジオ ボタン以外のすべてのコントロールの「グループ」プロパティを true に設定する必要がありますか?それとも、最後のラジオ ボタンの後の最初のコントロールに設定する必要がありますか?

  2. この問題が発生しているコントロールまたはダイアログを特定する簡単な方法はありますか? 各ダイアログを開いて、警告が表示されるまでいじることができました。ただ、このアプリはダイアログが多いので、もっと簡単な方法があればいいのですが。

  3. この警告を修正しないと、どのような悪影響が生じる可能性がありますか? 言い換えれば、これは問題ですか?

4

5 に答える 5

13

ここでの回答と古いフォーラムでのいくつかの調査の間に、少なくとも問題を解決する方法を見つけたと思います。上記の質問に対して私が見つけたものは次のとおりです。

  1. ChrisN と Smashery は、タブの順序を変更して、ラジオ ボタンが順番に並べられるようにすることを提案しました。これにより、いくつかの警告が修正されました。

    さらに、ラジオ ボタン グループの後のタブ オーダーの最初のコントロールには、WS_GROUP プロパティを設定する必要があります (またはエディターでグループ プロパティを true に設定します)。これにより、ラジオ ボタン グループが終了したことが MFC に通知されます。次の WS_GROUP が警告を生成するまで、タブ オーダーにすべてのコントロールが残っていないと、警告が生成されます。これらの両方を行った後、これらのダイアログの警告は消えました。

  2. これはまだ未解決の問題です。各ダイアログを開いて警告を待たずに、これらの問題を特定する良い方法を見つけられませんでした。

    ダイアログがこの警告を作成していることはわかっているが、どのコントロールが原因であるかがわからない場合は、警告を生成する TRACE() 呼び出しの DDX_Radio() 関数にブレークポイントを設定できます。これにより、問題が発生している特定のコントロールを特定しやすくなります。

  3. 私は ChrisN に同意します。この警告の理由は、タブ オーダーを再確認すること以外には考えられません。オンラインの他の場所では、これが引き起こす可能性のある問題への他の参照を見つけることができません。

于 2008-09-25T14:39:51.100 に答える
7

この警告は、グループ内の最初と最後のラジオ ボタンの間に、タブ オーダーにラジオ ボタン以外のコントロールがあることを意味します。スタイル セットを持つコントロールWS_GROUPは、グループの開始をマークします。

これを修正するには、ダイアログ エディタを使用してタブ オーダーを変更し、すべてのラジオ ボタンに順番に番号が付けられていることを確認します。これを行う別の方法として、テキスト エディターで .rc ファイルを開き、各ダイアログ リソース内のステートメントの順序を変更する方法があります (タブ オーダーは、コントロールがリストされている順序によって定義されます)。

ラジオ ボタンのグループ化が正しく機能していれば、この警告は無視しても問題ないと思います。

于 2008-09-24T23:23:37.620 に答える
1

タブ オーダー (フォーマット/タブ オーダー) を確認してください。ラジオ ボタンのグループの真ん中に通常のプッシュ ボタンがあるようです。これが実際に問題である場合は、[フォーマット/タブの順序] メニュー項目を使用して、正しい順序でコントロールをクリックすることで解決できます。

于 2008-09-24T23:13:18.333 に答える
0

ポイント2については、あなたがこれを未回答のままにしている理由だと思いますが、ラジオボタンのあるすべてのダイアログに対してテキスト検索(* .rc)を実行するよりも単純なことは想像できません。ヒットごとに、この問題のリソース コードを視覚的に調べて修正します。リソースファイルのソースで手動で行うのではなく、GUIデザイナーで遊んでみます。

于 2008-09-27T16:30:05.363 に答える
0

価値があるのは、正しいタブ順序で3つのラジオボタンがあり(.rcファイルで確認された後、問題なく)、それでも警告が表示されることです。DDX_Radio のブレークポイントは、2 番目と 3 番目のラジオ ボタンが非ラジオとして報告されていることを示していました。resource.h を調べて、ID 1313 を使用する最初のラジオ ボタンと、1311 および 1312 を使用する他の 2 つのラジオ ボタンを発見しました。それらを目的のタブ オーダーに配置し、ID を適切な番号に変更して問題を解決しました。ラジオグループが機能していても、GetWindow GW_HWNDNEXT がタブ順ではなく ID 順にリンクされていると思います。注: まだ Visual C++ v6 を使用しています

于 2018-07-13T00:43:25.397 に答える