view画面を変更 – プログラミング – Home

通知
すべてクリア

[解決済] view画面を変更


kou
 kou
(@kou)
ゲスト
結合: 21年前
投稿: 10
Topic starter  

CSingleDocTemplateクラスを使い、
CScrollViewを継承したViewクラスを作成し、画面に表示させています。

メインフレーム内でファイルを開くで、
viewクラスから別のCScrollView継承したクラス(nextViewとしましょう)を表示させるに
は、どのようにすればよろしいでしょうか。
本来ならば親クラスであるアプリケーションクラスに記述すればよいのですが、
viewクラス内でファイルを開く条件を記述済みですので、あまり変更したくはありませ
ん。
だからといって、Viewクラス内でnextViewをインスタンス化して渡すのもあまりよい策
だとはいえません。

よろしければご教授おねがいします。

☆開発環境
VisualC++.net 2003
Windows XP pro


引用未解決
トピックタグ
たいちう
 たいちう
(@たいちう)
ゲスト
結合: 23年前
投稿: 662
 

一般的な設計では、ファイルを開くのファイルはCDocument(を継承したクラス)で
す。
ドキュメントによって表示するCViewを変えることはできるので、
ファイルを読み込んだタイミングで動的にCViewを変更するのが良いと思います。

以下はInside Visual C++のサンプルソースの一部です。
色々試してみてください。

void CMainFrame::SwitchToView(eView nView)
{
CView* pOldActiveView = GetActiveView();
CView* pNewActiveView = (CView*) GetDlgItem(nView);
if (pNewActiveView == NULL) {
switch (nView) {
case STRING:
pNewActiveView = (CView*) new CStringView;
break;
case HEX:
pNewActiveView = (CView*) new CHexView;
break;
}
CCreateContext context;
context.m_pCurrentDoc = pOldActiveView->GetDocument();
pNewActiveView->Create(NULL, NULL, WS_BORDER,
CFrameWnd::rectDefault, this, nView, &context);
pNewActiveView->OnInitialUpdate();
}
SetActiveView(pNewActiveView);
pNewActiveView->ShowWindow(SW_SHOW);
pOldActiveView->ShowWindow(SW_HIDE);
pOldActiveView->SetDlgCtrlID(
pOldActiveView->GetRuntimeClass() ==
RUNTIME_CLASS(CStringView) ? STRING : HEX);
pNewActiveView->SetDlgCtrlID(AFX_IDW_PANE_FIRST);
RecalcLayout();
}


返信引用
kou
 kou
(@kou)
ゲスト
結合: 21年前
投稿: 10
Topic starter  

たいちうさん>

ご教授ありがとうございます。
おかげさまで、CViewを変更することに成功しました。

一つ問題があります。
変更したCViewクラスでは
コマンドハンドラは取得できるのに
なぜかメッセージハンドラが取得できないという問題がでてしまいました。
どこが問題なのかわからずにいます。

どなたかわかる方、よろしくお願いします。


返信引用
kou
 kou
(@kou)
ゲスト
結合: 21年前
投稿: 10
Topic starter  

追記:

Onpaint も動きません。

どうやら、ウインドウズメッセージが取得できていないようです。


返信引用
kou
 kou
(@kou)
ゲスト
結合: 21年前
投稿: 10
Topic starter  

試行錯誤の末、やっと解決いたしました。

たいちうさん、本当にありがとうございました!


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました