お世話になっております。
いま、VC6.0 SP5 の MFC(exe)MDIで
アプリケーションを作成しています。
とある事情からメニューは必要なくなり、
それならばメニューを表示させないように
しよう、ということになりました。
そのために、CMainFrameのOnCreate()の中で
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CMDIFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1;
:
:(省略)
:
//メニューを表示させない
SetMenu(NULL);
return 0;
}
としたところ、起動時には確かにメニューが表示されなくなりました。
ところが、アクティブな子ウィンドウをクリックしたり、
CMainFrameのツールバーのボタンをクリックすると
メニューが表示されてしまいます。
どなたか、上記のような現象を起こさずに
メニューを表示させなくする方法をご存知の方が
いらっしゃいましたらどうぞご教授ください。
よろしくお願いいたします。
CWinApp::InitInstance()でテンプレートを作成している個所があると思います。
CMultiDocTemplateクラスのコンストラクタの第1引数でメニューやアイコン等を指定出来ま
す。
現在の挙動ですとメニューとアイコンに同じIDがあるものが設定されていると思います。
それをアイコンのみ(メニューにないID)のIDに変更してあげればOKです。
注意点として子ウィンドウが最大化した時の「元のサイズに戻す」や「最小化」などのボタンが
表示されなくなってしまう(普段はメニューの右端に表示される)ので、代替ボタンの実装が必
要だと思います。
すいません。いくつか補足します。
OSはWinXP Proで、上記MDIは
ドキュメント/ビュー アーキテクチャを
利用しています。
また、上に示したSeEtMenu(NULL);
は、Appクラス内のInitInstance()にある
AddDocTemplate(pDocTemplate);
があると効かないようです。
ひろぴーさん、ありがとうございます。
教えていただいたとおりにしたところ、
実現することができました。
また、注意点についても現象確認いたしました。
ちなみに今回のアプリケーションでは子ウィンドウの
最大化を含む一切のサイズ変更を禁止している
(というか子ウィンドウはタイトルバー自体がない)
ので特に問題はないかと思います。
本当にありがとうございました。