無料ブログはココログ

« Codejock Xtreme ToolkitPro で AppWizard を VisualStudio 2015 に追加する方法 | トップページ | 同じSDKで新しいSDKを入れても古いSDKが適応される場合の対処方法 »

2017年2月19日 (日)

MFCリボンアプリでいつのまにかリボン上のコントロールが使えなくなっている場合の原因と対処方法

MFC でリボンアプリを作っているといつのまにか配置したボタンなどコントロールが無効になっている場合があります。

Ribbon_redid2_2

Ribbon_redid1_3

これが起きるのは resource.h ファイルの該当するコントロールの ID の数値を変更した場合に発生します。自分なんかは ID の整理は作成中はよく行います(リリース後は行いません)。今までようなツールバー・メニューバーのアプリを作っている場合では問題ありませんでしたが、リボンアプリの場合は事情が異なります。

MFC のリボンアプリでは、リボンリソースは *.mfcribbon-ms ファイルに記述されています。ファイルの中身を見るとリボンは XML で記述されています。

上図の例では resource.h ファイルの ID_WINDOW_MANAGER を変更した場合に発生しています(例では 131 から 13100 に変更しました)。

Ribbon_redid3_2

リボンの定義ファイル( *.mfcribbon-ms )をテキストエディタで ID_WINDOW_MANAGER を探すと下図のようになっており ID が一致しません。

Ribbon_redid4_2

この不一致のためリボンのコントロールが無効となってしまいます。修正方法は簡単で resource.h のリボンに関わる ID を変更したら、*.mfcribbon-ms 内の該当のコントロールの ID も同じ値に変更し、ビルドすると直ります(リビルドしておいたほうがいいかも)。

なぜリソース ID を二重持ちにしているのかが謎です。

« Codejock Xtreme ToolkitPro で AppWizard を VisualStudio 2015 に追加する方法 | トップページ | 同じSDKで新しいSDKを入れても古いSDKが適応される場合の対処方法 »

プログラミング」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

« Codejock Xtreme ToolkitPro で AppWizard を VisualStudio 2015 に追加する方法 | トップページ | 同じSDKで新しいSDKを入れても古いSDKが適応される場合の対処方法 »