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

このQ&Aのポイント
  • MFCプログラミングにおいて、複数のビューを表示する方法について教えてください。
  • AppWizardで作成したMDI(SDI)アプリにおいて、2つのビュー(1つ目は通常のビュー、2つ目はOpenGL表示)を関連づける方法について教えてください。
  • フレームウィンドウとドキュメント、ビューを独自に作成した場合、それらの関連づけをどのように行えば良いか教えてください。
回答を見る
  • ベストアンサー

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

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

  • zico
  • お礼率60% (48/80)

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

  • ベストアンサー
回答No.1

ウィザードで作ったCWinApp派生クラスのInitInstance()に CSingleDocTemplate* pDocTemplate; pDocTemplate = new CSingleDocTemplate(IDR_MAINFRAME,RUNTIME_CLASS(CCubeDoc),RUNTIME_CLASS(CMainFrame),RUNTIME_CLASS(CCubeView)); AddDocTemplate(pDocTemplate); の3行がありますよね。このうち後ろ2行を追加してあげればよいです。(真中の行のパラメーターはプログラムに応じて変更する必要があります。) OpenGLであることは関係ないですよね。

関連するQ&A

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

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

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

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

  • MFC:MDIにおけるビューのアクティブ化

    ・環境 VisualStudio2008SP1+FeaturePack Windows7 64bit タブドキュメント形式でMDIアプリを作っているのですが、複数ドキュメントがある際にプログラムから任意のビューを安全にアクティブ化させる方法がわからずに困っております。CMainFrame::SetActiveViewメソッドを使用すると指定したビューがアクティブになり所望の動作になるのですが、この方法だとドキュメントをクローズするときに以下の例外が出て怒られます。SetActiveViewはビューのOnCreate内で実行しています。  アクティブ化を解除しているアクティブ化コンテキストは、最近アクティブ化されたものではありません。 こういった状況に遭遇しない方法を探っているのですが使用するAPIと適切な使用タイミングがつかめず困っております。どなたかにご教授いただければ幸いです。

  • CViewクラスの切り替え

    MFCプログラミングについて教えてください。 同じドキュメントに対して、 通常の表示とOpenGL表示 2つのViewを作り、 切り替えボタンまで作ったのですが、 肝心のViewを切り替える方法が全く分かりません。 MDIなので、childframeで操作するのでしょうか? ご教示よろしくお願い致します。

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

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

  • photoshopCS4 回転ビューツールについて

    回転ビューツールを使っていると、突然使えなくなります。 はじめは使えていたのに、別のツールを使って、また回転しようとすると 「要求された操作を完了できません。OpenGL対応のドキュメントウィンドウのみで機能します」 と表示されます。 環境設定の「OpenGL描画を有効にする」にもチェックはついています。 photoshopの再起動、パソコンの再起動をしても同じでした。 ・photoshopCS4 ・NVIDIA Corporation GeForce7050/nForce 620i/integrated/SSE2 ・windows7 ご回答よろしくお願いします。

  • MFC オリジナルDLLからエクスポートしたビュークラスを CMultiDocTemplate で登録すると Assert Failed! が出る

    環境はVisualStudio2005、MDIプロジェクトと拡張DLLプロジェクトを1つのソリューションに作成しています。 MDIアプリを作成していますが InitInstance() 関数内の CMultiDocTemplateの引数 RUNTIME_CLASS() 実行時にAssert Failed!が出ます。 CMultiDocTemplate に登録するビュークラスはオリジナルの拡張DLL内でCFormViewクラスから派生させたクラスです。 特に変わったことをしている訳ではなく、ほとんどウィザードがソースを吐いた状態のままです。 "COriginalView" をデフォルトの "CMyView" にするとエラーは出ません。 また、"COriginalView" もコントロールを1ヶ置いてビューフォームとクラスを作成し、 AFX_EXT_CLASS でエクスポートして参照できています。 また、MDI側でフォームとクラスを作成しそれを使用した場合はエラーは出ません。 ドキュメント/ビューアーキテクチャの理解が足りない為起きている問題だと思います。 宜しくお願い致します。 --- 詳細 ------------------------------------------------ CMultiDocTemplate* pDocTemplate; pDocTemplate = new CMultiDocTemplate(IDR_MAINFRAME,   RUNTIME_CLASS(CMyDoc),   RUNTIME_CLASS(CChildFrame),   RUNTIME_CLASS(CDllView)); ←これ実行時に Assert が出る AddDocTemplate(pDocTemplate); ---------------------------------------------------------

  • 特定のビューへのポインタ取得方法について

    MFCプログラミング(MDI)について教えてください。 1つのドキュメントに 複数の子ウィンドウ+子ビューのセットがあるとき、 特定のビューへのポインタの取得方法を教えてください。 ちなみに、ビューの種類は、 1.CViewの派生クラス 2.CFormViewの派生クラス です。 MSDNを調べ回っった結果、 ドキュメントクラスのポインタから、 GetNextView(pos)を使って順番にビューを使うところまで来たのですが、その後が分かりませんし、 この方法の方向性自体の是非も良く分かりません。 ご指導よろしくお願いします。 POSITION pos = pDoc->GetFirstViewPosition(); while(pos != NULL) { CView* tmpView = pDoc->GetNextView(pos); if(tmpView == ???????)........????? }

  • MFCアプリケーションでアイコンが正しく表示されない

    Viisual C++ 6.0 を使ってMFCのSDIアプリケーションを作っているのですが アプリケーションを起動したときにメインウィンドウの左上に表示される はずの小さいアイコンが正しく表示されなくて困っています。 (添付画像に示したように白い四角形が表示されます) なお、アイコンはVisual C++のリソースエディタで作っており、 エクスプローラから実行ファイルを閲覧するとアイコンは正しく表示されます。 (添付画像を参照)なぜメインウィンドウだけ正しく表示されないのでしょう? どうすればメインウィンドウの左上に正しいアイコンが表示されるでしょうか? AppWizardで新しくSDIアプリケーションのプロジェクトを作り直せば、 正しく表示されるようなのですが、これまで作ったソースを丸ごと移動させる のは手間がかかりそうなのでできればそれはしたくないのです。

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

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

専門家に質問してみよう