• ベストアンサー

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

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

  • mtsm
  • お礼率64% (85/132)

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

  • ベストアンサー
  • Wr5
  • ベストアンサー率53% (2177/4070)
回答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% (2177/4070)
回答No.1

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

mtsm
質問者

補足

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

関連するQ&A

  • MFCのマルチドキュメントで

    VisualC++.net MFCのウィザードでマルチドキュメントのアプリケーションを作成しました。 起動時はウィンドウが1つだけ開いているのですが、起動時に複数のウィンドウを起ち上げるようにするには、どの部分を変更したらよいのでしょうか? ご存知の方おしえてください。

  • VisualC++.net MFCのウィザードで・・・

    当方初心者です。 VisualC++.net MFCのウィザードでシングルドキュメントで作成したアプリケーションをマルチドキュメントに変更するには、どの部分を変更したらよいのでしょうか? はじめからMFCを使って作り直さない方法をご存知の方おしえてください。

  • illustratorの別ドキュメントで作成したロゴを

    illustratorの別ドキュメントで作成したロゴを新しく作成するドキュメントでも配置したいのです。 前作は、業者の人に作成してもらったものです。 データをCDR保存してありました。 私は、只今勉強中です。ロゴとかを今作成している自分のドキュメントの中に配置できないかと、考えています。 これから、共通して出てくるロゴや住所やキャッチなど、別ドキュメントで使うのには、どうしたらよいのでしょうか。

  • Windows7のマルチディスプレイ環境について

    Windows7のマルチディスプレイ環境について 先日Vistaから7にアップグレードしました。 Vistaの頃からGF7600GTにてマルチディスプレイ環境を利用していたのですが、7に以降後デスクトップアイコンに不具合がでてしまいます。 メインディスプレイとサブディスプレイにアイコンを分けて表示しているのですが起動時、再起動時に全てのアイコンがメインディスプレイに再配置されてしまいます。 このような症状の解決方法がありましたら教えてください。

  • MDIでプロジェクトを作成しSDIとして使用する方法

    次の開発環境でWindowsアプリを作成するにあたり、 アプリケーションの種類をSDIとすべきかMDIと すべきか迷っています。  WindowsXP Professional  Visual Studio.NET 2002  VC++ MFC そこで、質問なのですがアプリケーションの種類を MDIとしてプロジェクトを作成した後にSDIと同じ動き となるようにコードを書く(変更する)ことがで きますか。 例えば、プロジェクトを起動させると、常に1つの ドキュメントがメインウィンドウ全体に表示される。 ご存じの方すいませんがよろしくお願いします。

  • windowsが起動できない

    パソコンを知人からOSだけ入ってる状態で購入し、windowsアップデートをして再起動したあと起動しなくなりました。 windowsのロゴが表示され(なぜか2重に。真ん中に通常のと、下の方に薄くロゴとメーターと)、ようこそ画面が開き、画面が切りかわって、壁紙が表示されて止まってしまいます。(タスクバー、ファイル等が出てこない状態)そして、エラーで終了したときに出てくる、報告の送信可否のが出てきて、それ以降は何も起こりません。 [ctrl]+[alt]+[del]を押すとタスクマネージャーは開けるので「プロセス」見てみたら、エクスプローラーは消えています。「アプリケーション」の部分は何も表示されません。 どうしたらいいのでしょうか?

  • Flash ステージに初期配置したMCがnull

    FlashPro CS5で as3の勉強をしています。 メインのタイムラインにマスク用のレイヤーを作成し、その2フレーム目にムービークリップを配置してインスタンス名を付けました。 ところが、ドキュメントクラスオブジェクトからこのマスク用のインスタンスを参照したところ、nullが返って来てしまいました。 これはどういった仕組みになっているのでしょうか? 2フレーム目で初めてインスタンスが生成されるのでしょうか? 再び1フレーム目に戻ってきた時にはどうなっているのでしょうか?

    • ベストアンサー
    • Flash
  • Flash CS4で作成したアプリケーションの連動について

    Flash CS4でアプリケーションを作成しています。 作成をおこないたいアプリケーションの遷移図は 1.メイン画面を表示する。(メイン画面にボタンを4つ配置し別の画面(Flashで作成したアプリ)が表示する。) 2.メイン画面から呼び出されたサブ画面を表示する。(この場合メイン画面を閉じる) 3.サブ画面で処理を終えて戻るボタン押下でメイン画面を表示する。 ※この場合、メイン画面、サブ画面(4つ)はそれぞれ別のFlash CS4で作成したアプリケーション(全部で5つ) 上記のようなアプリケーションを作成したいのですが、アプリケーション間の連動はどのように作成すればいいでしょうか?? Flash CS4で作成したアプリケーションだけでは無理のようでしたら別の方法も教えていただきたいのですが。 よろしくお願いします。

  • 編集中ドキュメントを「新規作成後の状態」にするには

    VisualC++ 2008のSDIで開発しています。 新規作成直後のドキュメントは「×ボタン」を押すとすぐに閉じますよね。 編集した後でも保存ダイアログなどを表示させず、すぐに閉じるにはどうすればよいでしょうか。 開発中のアプリでは、新規作成直後に必ずあるオブジェクトを配置し、配置し終わった状態を「新規作成状態」としたいのですが、 そのままでは編集した後の状態と判断され、閉じようとすれば当然保存ダイアログが出てきます。 これを何も表示させずに閉じたいのです。よろしくお願い致します。

  • ASP.NETプログラムのWeb再配置

    お世話になります。 早速ですが質問させて下さい。 ASP.NET(vs2010)で開発したプログラムをWin2008SVR+IIS7.5の環境へ配置しました。 配置は「配置パッケージの作成」で作られた Release\Package フォルダを、まるごと対象PCへコピー後して「***.deploy.cmd(***はアプリケーション名) 」の実行で行い、現在このwebアプリは稼動しています。 解らないのは、初回配置後にプログラムを構成しているファイル(aspx、vb)の内、一つでも修正をした場合の再配置方法です。 Web画面のほんの一部を変更した様な場合(改行を1個増やしたとか)でも、***.deploy.cmd を使用しなければいけないのでしょうか? それとも、変更したファイル(aspx、vb)を上書いてしまえば事足りるのでしょうか? 確実なのは ***.deploy.cmd を使用することなのでしょうが、Package フォルダがかなりの大きさで、遠方の環境に送るには負荷が大き過ぎます。 また、変更したファイル(aspx、vb)を上書いてテストしてみたところ、問題無さそうには見え(動き)ます。 しかし、bin フォルダに出来る ***.dll、***.xml 等は「配置パッケージの作成」を行うと更新されますが、これらは放置しておいても大丈夫なのでしょうか? 以上、解りにくい文章で申し訳ありませんが、ご存じの方がお見えでしたら、お助け下さい。 よろしく御願いします。

専門家に質問してみよう