• ベストアンサー

ウィンドウの背景に画像を配置する

VS2008(C++)でVS2008ライクなFMCアプリケーションを作成しています。 アプリケーションウィザードのアプリケーション種類はマルチドキュメントです。 起動直後はドキュメントが開いていないため、メインウィンドウの真ん中が何かさみしいので会社のロゴなどを配置してみたいのですが、方法がわかりません。 ご存じの方がいましたら、アドバイスをお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • Wr5
  • ベストアンサー率53% (2173/4061)
回答No.2

>はじめに紹介いただいたページは私も見ていましたが、サンプルコードにたどり着く方法がわかりませんでした。 どのクラスの、どのメッセージハンドラに入れればいいのか…って程度かと思われますが…。 MSのサイトの方ので背景色の変更ができる。 かと思われます。 # 記述されている手順に従っていけば背景色が変更できるかと。 以下、VS2008は持っていない(EEのみのためMFCが使えない)のでVS2005で… # VS2005とVS2008で大きな違いはない…でしょう。たぶん。 >1.ClassWizard でジェネリック CWnd クラスを作成します。 クラスビュー内のTreeViewの先頭ノード(プロジェクト名で表示されているノード)で右クリック、 [追加]-[クラス]と進んで、テンプレートからMFCクラスを選択して[追加]ボタンをクリック。 基本クラスはCWndのままクラス名にCNewClientWndを指定して[完了]ボタンをクリック。 >2.CMainFrame クラスに手順 1、CWnd クラスの型を使用してメンバー変数を追加します。 クラスビュー内のCMainFrameで右クリック、 [追加]-[変数の追加]と進んで、変数の種類に1.で追加したクラス名を指定、変数名にm_wndNewClientを指定して[完了]ボタンをクリック。 >3.CMainFrame の OnCreate メンバー関数の呼び出しの後に、基本クラスのCMDIFrameWnd::OnCreate()、SubclassWindow() への呼び出しを追加します。 ソリューションエクスプローラからMainFrame.cppを開いて、OnCreate()の最後に掲示されているコードを追加。 >4.ウィンドウをサブクラス化するたびに、GetSuperWndProcAddr() メンバー関数は、CWnd の記憶域、元のウィンドウ プロシージャのアドレスを提供するためにオーバーライドする必要があります。そのためには、手順 1 で作成した CWnd クラスの実装に次の関数を追加します。 今回はサブクラス化しないので無視。 >5.上に示したコードを使用して、ジェネリックの CWnd クラスに WM_ERASEBKGND メッセージをオーバーライドします。 クラスビュー内のCNewClientWndを選択して右クリック、[プロパティ]を選択してプロパティを表示。 表示されたプロパティのツールバーから「メッセージ」を選択すると、下にメッセージがずらずら出てきているのでWM_ERASEBKGNDを選択して右のコンボボックスのプルダウンボタン(下向きの三角)をクリック。 「<追加> OnEraseBkgnd」を選択してクリックしてメッセージハンドラを追加。 該当ハンドラの編集画面になるので、 CNewClientWnd::OnEraseBkgnd()に掲示されているサンプルコードのBOOL CSampleView::OnEraseBkgnd(CDC* pDC)の中身をコピペ。 # 元々あった return CWnd::OnEraseBkgnd(pDC); は削除。 で、ビルドして実行してみると背景色が変わるかと。 CNewClientWnd::OnEraseBkgnd()内でpDCに対して描画するコードを追加すれば良いかと思います。

mtsm
質問者

お礼

詳しい説明、ありがとうございます。 さっそく明日試してみます。

その他の回答 (1)

  • Wr5
  • ベストアンサー率53% (2173/4061)
回答No.1

回答ありませんね…… 「MFC MDI 背景 描画」で検索すると… http://www.mermaid-tavern.com/tomato/pc1/mfc3_0322p.html とか http://support.microsoft.com/kb/103786/ja とか見つかるかと。

mtsm
質問者

補足

貴重なご意見、ありがとうございます。 はじめに紹介いただいたページは私も見ていましたが、サンプルコードにたどり着く方法がわかりませんでした。 このページにサンプルコードはあるのでしょうか。

関連するQ&A

専門家に質問してみよう