• 締切済み

CViewクラスの切り替え

birの回答

  • bir
  • ベストアンサー率44% (11/25)
回答No.1

正攻法だと全てのビューを検索して、表示させたい ビューと一致するものがあれば、それをアクティブに するという方法になると思います。 それらしいソースがあったので参考にどうぞ。 void CMainFrame::SwitchToView(CDocTemplate* pTemplate, CRuntimeClass *pViewClass) { CMDIChildWnd* pMDIActive = MDIGetActive(); CDocument* pDoc = pMDIActive->GetActiveDocument(); CView* pView; POSITION pos = pDoc->GetFirstViewPosition(); while (pos != NULL) { pView = pDoc->GetNextView(pos); if (pView->IsKindOf(pViewClass)) { // 要求されたビュークラスはすでに作成されているので、 // それを表示する pView->GetParentFrame()->ActivateFrame(); return; } } // 要求されたビュークラスはまだ作成されていない CMDIChildWnd* pNewFrame = (CMDIChildWnd*) pTemplate->CreateNewFrame(pDoc, NULL); if (pNewFrame == NULL) return; pTemplate->InitialUpdateFrame (pNewFrame, pDoc); } 使えるかどうかわかりませんが、子ウィンドウのポインタがわかっていれば、 CMDIFrameWnd::MDIActivate() でもできるかもしれません。 (CMDIChildWndクラスにも似たようなメンバがあります)

関連するQ&A

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

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

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

    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 の SDI でアプリケーション開発をしています。 当方 “Hello, world!” を学び始めて数ヶ月のビギナーです。 ドキュメント・ビュー構造では ビュークラスからは GetDocument() 関数を使って, ドキュメントクラスの public な領域を操作することができます。 ここで質問です。 自分の作った,独自のクラスから,ドキュメントクラスを取得する には,どうしたらいいのでしょうか? GetDocument() 関数はビュークラスにしか(?)備わっていないようで,困っています。 ドキュメントクラスの ID でも分かれば GetDlgItem() が使えるかもしれない(?)などと思ったのですが。 初心者につき,変な質問をしているかもしれませんが,ご教授いただけると幸いです。

  • ダイアログからビュークラスのメンバ変数へ代入するには?

    プログラミング初心者です. Visual C++.netを使っています. Viewクラスから,Domodal()にてあるダイアログを呼び出しました. ダイアログ上のあるボタンを押したら,Viewクラスのメンバ変数へ1を代入するという処理をしたいと考えています.  ラジオボタンやエディタコントロールであれば,DDXを利用すればよいと思うのですが,単なるボタンの場合はどうすれば,呼び出し元のViewクラスの値を操作(この場合,代入)出来るのでしょうか?

  • MDIタブ付グループでビューを切り替える

    VS2008 C++にてVisualStudioライクなアプリを作成しています。 タブ付グループでビューを切り替えるショートカットをはないものでしょうか。 自分でコードを書かないとならないのでしょうか。 通常のMDIであれば、「Ctrl + F6」がNext Viewのショートカットでしたが、これに変わるような操作の実装方法をアドバイスいただけないでしょうか。

  • 【MFC】キャンセルボタン処理が実装できない

    VC++2005(MFC)にて下記サイトを参考にMDIアプリケーションを作成しています。 http://www.alpha-net.ne.jp/users2/uk413/vc/VCT_MDI1.html 手順として、プロジェクトを新規作成し、MFC AppWizard(exe)で 新規プロジェクト名をMDITest1に設定し、アプリケーションの種類はMDI、 ビュークラスCMDITest1Viewの基本クラスはCFormViewとします。 リソースビューより、自動生成されたフォームの上に、 Buttonを配置し、イベントハンドラOnBnClickedButton1()内にて、 IDCANCEL()処理にて、ボタン押下時のウィンドウを閉じる処理を 実装したいのですが、コンパイルエラーが発生します。 基本クラスがCDialogクラスの場合は実装できるような気がするのですが。。 フォームビューだと、キャンセル処理は実装不可能なのでしょうか? また、不可能だとしたらウィンドウを閉じる処理はどのように実装すればよいのでしょうか? 解決策をご存知の方おられましたら、お手数ですがご教授宜しくお願い致します。

  • EditViewクラス 文字色の変更とクリア

    お世話になります。現在MFCでTCP/IPパケットを受信したものをCEdtiViewクラスのViewに表示するプログラムを作成しました。 そこで、わからない事が出てきたので、わかる方々にご教示していただきたく投稿いたしました。 わからない事は、Viewに表示される文字色が現在Black(default??)なのですが、その色を変えたいのですが、どのようにしたらいいのでしょうか? ちなみにViewへの表示はGetEditCtrl()という関数を使用していて、 CString Msg(_T("TEST")); int nLen = GetWindowTextLength(); GetEdtiCtrl().SetSel(nLen,nLen); GetEditCtrl().ReplaceSel(Msg); このような記述をしています。 このGetEditCtrlを使って文字色の変更は出来ないのでしょうか? あとタイトルにも記載したのですが、あるトリガーがあるとそのEditViewクラスの描画文字列をすべてクリアしたいと考えています。 トリガーは簡単にボタンが押されたときに~~~C***Viewの領域クリア このような時はどのようにしたらいいのでしょうか? 初心者ですが、宜しくお願いいたします。 ---------------------------開発環境-------------------------------- WinXP sp2 MFC SDI

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

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

  • ダイアログから、ドキュメントのメンバ変数に設定するには

    MFCで現在 View-Documentの存在を知った程度の知識でプログラムを書いています。 MDI?形式でドキュメントにstrというCString型のメンバ変数を持たせています。 ViewからはGetDocumentで簡単にアクセスできますが、自作したダイアログボックス(例えばAbortのようなもの)の中にエディトボックスがあり、ここに入力された内容をドキュメントのメンバ変数strに代入したいのですが、どうすればよいのか分からず困っています。 あと、SDIやダイアログ形式でも同じように自作したダイアログのエディトボックスに入力した内容を設定したいです。 VBのInputBoxのようなことをしようとしていると想像してください。

  • フォームの操作について

    現在、VB2010で、MDIフォームに、MDI子フォームを表示させた状態で、通常のフォームを開いています。 このとき、MDI子フォームにフォーカスが移らないようにしたいのですが 方法が分かりません。 よろしくお願いします。