一つのDocと複数のViewのメッセージハンドラの件

[戻る]
たろう 2003/11/30(日) 11:17:19
VC++6.0 MFC Windows98 です
先ほどの質問に関連した内容ですが
宜しく御願い致します

  XXXCDoc      クラス ---->(a)
  XXXCView   クラス ----(b)
   Viewクラスをもうひとつ作成
  XXXView2(基本クラスをCView)--->(c)

それぞれのViewにメッセージを処理する関数を追加
しました。
(メニュー項目のメッセージハンドラであるCOMMANDを使用)
(b)には XXXCView:OnTEST1(){
                 AfxMessageBox("TEST1");
         }    
(c)には xxxCView2:OnTEST2(){
                 AfxMessageBox("TEST2");
         }
ところが(b)は正常に処理するのですが
(c)は反応が有りません

宜しく御願いします

n [E-Mail] 2003/11/30(日) 14:38:13
View2クラス型変数を管理しているクラスをCxxxとし、
View2へのポインタ変数をm_pView2として、
CxxxのOnCmdMsg()を以下のようにオーバーライドすると、うまくいくかも...?

BOOL Cxxx::OnCmdMsg(UINT nID,int nCode,void* pExtra,
    AFX_CMDHANDLERINFO* pHandlerInfo)
{
    if(Cxxxの基底クラス::OnCmdMsg(nID,nCode,pExtra,pHandlerInfo))
        return TRUE;

    if(m_pView2)
        return m_pView2->OnCmdMsg(nID,nCode,pExtra,pHandlerInfo);

    return FALSE;
}

wood 2003/11/30(日) 17:43:33
http://support.microsoft.com/default.aspx?scid=kb;ja;141334
あなたの実現したい事と同等のサンプルのはずです是非参考にしてみてください

格VIEWごとに、
    void        SetFromDoc();
    BOOL        SetToDoc();    // Called from SwitchView()
を用意しておくことと

XXXXAppに用意する
   CView * SwitchView( UINT nIndex );    // Switch between views
    BOOL SaveActiveViewsData();            // Save/Validate active views data
と
protected:

    // Array of views attached to single document
    CView * m_pViews[NUMVIEWS];
    // Index to current view
    UINT m_nCurView;    
を理解できるようになれば
前回の質問とあわせ一挙に解決できるのではないでしょうか

また
XXXXAppのInitInstanceなどもきちんとご理解できるといいと思います

たろう 2003/11/30(日) 19:05:29
[[解決]]
nさん woodさんどうも有難うございます

ただ、内容が難しく又今後有効活用して行くためにも
じっくりと取り組みたく、実装の作動確認はしていないのですが
解決としたいです

(時間がかかりそうなので ^^)

古いスレッドには追加発言できません。