• ベストアンサー

スケルトンの中のどこでウィンドウが生成されているのか?

VC++、MFCです。 MFC AppWizardでSDIベースのスケルトンを生成した時点で、既にウィンドウが作られるコードがソース内に存在するはずなのですが、単純にCreate関数を探しても見当たりません。 一体どこでウィンドウが作るコードはどこにあるのでしょうか?

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

  • ベストアンサー
  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.2

スケルトンで作成されるコードで言うと、 CWinApp::InitInstance の中の if (!ProcessShellCommand(cmdInfo)) の中です。 実際には、ここで呼ばれるフレームワーク中でCreateExが呼ばれてたはずです。興味があるのでしたらProcessShellCommandにブレイクポイントをはって、ステップ実行してソースを追ってみてください。 >思いますが、そのコンストラクタでCreateされていると思います。 MFCのフレームワーク中でコンストラクタ内でウィンドウを作成することはありません。

_comcom
質問者

お礼

どうもありがとうございます。 実際にProcessShellCommandのソースを追うとCreateExに行き当たりました。 ようやくスッキリしました。

その他の回答 (1)

  • sha-girl
  • ベストアンサー率52% (430/816)
回答No.1

SDIの場合CWinAppを継承したクラスがあると 思いますが、そのコンストラクタでCreateされていると思います。 CWinApp自体のコードはプロジェクトにはないわけで Create関数を探しても見つからないのだと思います。

_comcom
質問者

お礼

ありがとうございます。 調べてみたいと思います。

関連するQ&A

  • ウインドウのビューをリストビューにするには?(VC++6.0)

    VC++6.0 MFCにて MFC AppWizardにてプロジェクトを作成します。 SDIを選択し、後はデフォルトのままです。 そうやって作ったベースとなるコードを実行すると、 普通にウインドウが開きます。(当然か) そのウインドウのビューをリストビューにしたいのですが、 どこにどのようなコードを書けば良いのでしょうか?

  • ウィンドウ生成時の不具合について

    VC++6.0 WIN98 MFCにて ウィザードを使ってSDIにてウィンドウ1を作成し、メニューをクリックすることで、ウィンドウ2が新たに生成されるプログラムを書きました。 ウィンドウ2が生成されたときに、ウィンドウ1に重なっていると、ウィンドウ2を閉じてもウィンドウ1のクライアント領域にウィンドウ2の形が残ったままになってしまいます。 どうしてこうなるのでしょうか?

  • MFC SDIアプリで開いているファイルを再度開く方法

    お世話になります。 VC++6.0 MFCを使ってSDIアプリを開発していますが、ウィザードが生成したスケルトンのシリアライズ関数についての質問です。 このシリアライズ関数は、「ファイル」メニューの「開く」コマンドで既に開いているファイルを指定すると、呼ばれないようです。 MSDNではDeleteContents関数で開いているドキュメントを捨てれば良いように書いてありますが、サンプルコードはアロケートメモリの解放位で、どうすればシリアライズ関数を呼び出してくれるのか判りません。 ご存じな方は教えて下さい。

  • SDIのクライアント領域に子ウィンドウを生成するには?

    環境 Win98 VC++6.0 MFCにて http://www.kumei.ne.jp/c_lang/sdk/sdk_50.htm ↑のように、SDIにてクライアント領域に子ウィンドウを生成するには、MFCの場合どうすれば良いのでしょうか? いつも質問ばかりで申し訳ありません。 ご存知の方お願いいたします。

  • CMainFrameクラスなどのオブジェクトはどこで定義されていますか?

    VC++6.0です。 SDIベースでスケルトンを作るとCMainFrameクラスなどが作られます。ソースの中でこれらのクラスのオブジェクトが生成されている部分を見たいのですが、見つかりません。 InitInstance()の中のRUNTIME_CLASS()があやしいような気がしますが、これなんでしょうか? ただしRUNTIME_CLASS()の関連ページを読んでもよくわかりませんでした。 今の目標はスケルトンで生成されたCMainFrameのオブジェクトのメンバにアクセスすることです。 よろしくお願いします。

  • SDIウィンドウを動的に複数生成する方法

    ダイアログベースのアプリケーションに配置したボタンを押すたびに、 SDIのウィンドウを動的に生成・表示したいと思っています。 しかし、なにをどうすればいいのかわかりません。 とっかかりでもよいので、なにかヒントが欲しいと思って質問します。 生成するSDIウィンドウには以下のような必要条件があります。 1.CMfcToolBarがある 2.CMfcRibbonStatusBarとスライダーバーがある。 3.独自に作成したCScrollViewクラスの派生クラスを使用する 4.1アプリケーション内で複数のSDIを生成する 開発環境 VC2010, WindowsXP よろしくお願いします。 <背景> 以前、CSingleDocTemplateを使用してウィンドウを作成しが、なぜかツールバーのボタンにUPDATE_COMMAND_UIがこない事が判明。 四苦八苦したが解決できないため、別アプローチを検討したいと思った。

  • Viewウインドウに直接ボタンを貼り付けるには

    VC++6.0 APPWizard(exe) SDI で作成したViewウインドウにボタンを貼り付けたいのですが、どうすればよいか教えてください。 普通にダイアログにボタンを貼り付ける場合のように簡単ではないのですか?

  • ツールバーから選択で一つだけウィンドウ生成

    VC++2005(MFC)にてMDIアプリケーションを作成しております。 前回当サイトの質問 http://oshiete1.goo.ne.jp/qa4708537.html にて、参照URL(http://www.alpha-net.ne.jp/users2/uk413/vc/VCT_MDI1.html)と、 回答者様のご指摘により問題解決したのですが、 このままだと、メニュー選択するとウィンドウ1とウィンドウ2が 再び現れてしまい、合計4つのウィンドウが現れることになります。 (ウィンドウ1:2個、ウィンドウ2:2個) 起動時にウィンドウ1のみ表示させる方法は自力で作成したのですが、 メニュー選択でウィンドウを一つ(ウィンドウ2)だけ 追加生成するようにし、合計2つの別々のウィンドウが現れるようにしたいのです。 下記に改良した現時点でのソースコードを記載します。 「☆☆☆追加☆☆☆」で囲まれた箇所が、上記質問URLを元に改変した ソースコードになります。他はスケルトンです。 【呼び出し元クラス:CMDITest1App】 CMDITest1App::CMDITest1App(){ //コンストラクタ //☆☆☆追加☆☆☆ m_WndFlg == false; //☆☆☆追加☆☆☆ } BOOL CMDITest1App::InitInstance(){ ・・・ //スケルトン //☆☆☆追加☆☆☆ CMultiDocTemplate* pDocTemplate2; pDocTemplate2 = new CMultiDocTemplate(IDR_MDITest1TYPE2, RUNTIME_CLASS(CMDITest1Doc), RUNTIME_CLASS(CChildFrame), // カスタム MDI 子フレーム RUNTIME_CLASS(CMDITest1View2)); if (!pDocTemplate2) return FALSE; AddDocTemplate(pDocTemplate2); m_pDocTemplate2 = pDocTemplate2; //☆☆☆追加☆☆☆ ・・・ return TRUE; } 【オーバーライドした関数:OnFileNew()】 //☆☆☆追加☆☆☆ void CMDITest1App::OnFileNew(){ CWinApp::OnFileNew(); if( m_WndFlg == true ){ //初回起動時は生成しない ((CMainFrame*)m_pMainWnd)->OpenView( m_pDocTemplate2 ); } m_WndFlg = true; } //☆☆☆追加☆☆☆ 何か良い方法ございましたら、ご教授お願い致します。 また、現在MDIでのアプリケーション作成について作成手順が分からず大変苦戦しております。 何か順序を追って作成していけるような参考サイト・文献などあれば、 そちらの方もご教授頂けますと幸いです。

  • 複数のビュー表示について

    MFCプログラミングをしています。 AppWizardでMDI(SDI)アプリを作成しました。 今、1つのドキュメント(データ)に対して、 2つのビューを作らなくてはなりません。 (2つ目はOpenGL表示) フレームウィンドウを生成して Create関数のコーディングまでは、 何とか書けましたが、 実行すると、異常終了していまします。 というのも、 新しいウィンドウとドキュメント、ビューの 関連づけがされていないからだと思います。 ウィザードで作られる場合は、 フレームウィンドウとドキュメント、ビューの 関連づけはドキュメントテンプレートを 使っているようですが、 実行後に独自に作る場合は どのようにすれば良いか分からず、困り果てています。 どなたかご指導又はヒントをよろしくお願い致します。

  • VC++6.0 MFCダイヤログベースでの画像処理

    初心者です。 VC++6.0 MFCダイヤログベースのアプリケーションで、ビットマップ画像を生成表示するにはどうしたらよいでしょうか。 MFC-SDIでは経験があります。 例題と扱っているサイトありましたら、紹介願います。

専門家に質問してみよう