MFC VC++ Vew切り替え方法

// MainFrm.cpp : CMainFrame クラスの実装
//

include “stdafx.h”

//============================================================
//============================================================

include “ControlPracticeDoc.h”

//============================================================
//============================================================

include “ControlPractice.h”

include “ControlPracticeView.h”

include “LeftFormVew.h”

include “RightFormVew.h”

//============================================================
//============================================================

include “MainFrm.h”

//============================================================
//============================================================

ifdef _DEBUG

define new DEBUG_NEW

endif

// CMainFrame

IMPLEMENT_DYNCREATE(CMainFrame, CFrameWnd)

BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
ON_WM_CREATE()
ON_MESSAGE(ID_VEW_CHENGER,OneVewChenger)//VEWを切り替えます
END_MESSAGE_MAP()

static UINT indicators[] =
{
ID_SEPARATOR, // ステータス ライン インジケータ
ID_INDICATOR_CAPS,
ID_INDICATOR_NUM,
ID_INDICATOR_SCRL,
};

/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
// CMainFrame コンストラクション/デストラクション

CMainFrame::CMainFrame()
{
// TODO: メンバ初期化コードをここに追加してください。
}

/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
CMainFrame::~CMainFrame()
{
}

/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1;

if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
    | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) )
{
    TRACE0("ツール バーの作成に失敗しました。\n");
    return -1;      // 作成できませんでした。
}

if (!m_wndStatusBar.Create(this) ||
    !m_wndStatusBar.SetIndicators(indicators,
      sizeof(indicators)/sizeof(UINT)))
{
    TRACE0("ステータス バーの作成に失敗しました。\n");
    return -1;      // 作成できませんでした。
}

// TODO: ツール バーをドッキング可能にしない場合は、これらの 3 行を削除してください。
m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
EnableDocking(CBRS_ALIGN_ANY);
DockControlBar(&m_wndToolBar);

return 0;

}

/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
if( !CFrameWnd::PreCreateWindow(cs) )
return FALSE;
// TODO: この位置で CREATESTRUCT cs を修正して Window クラスまたはスタイルを
// 修正してください。

return TRUE;

}

/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
// CMainFrame 診断

ifdef _DEBUG

void CMainFrame::AssertValid() const
{
CFrameWnd::AssertValid();
}

void CMainFrame::Dump(CDumpContext& dc) const
{
CFrameWnd::Dump(dc);
}

endif //_DEBUG

// CMainFrame メッセージ ハンドラ

/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
CDocument* CMainFrame::EkGetActiveDocument()
{
CWnd* pWnd=AfxGetMainWnd();
if (pWnd==NULL) return(NULL);

ASSERT_VALID(pWnd);
ASSERT_KINDOF(CFrameWnd,pWnd);
CFrameWnd* pMainFrame=static_cast>(pWnd); CFrameWnd pActiveFrame=pMainFrame->GetActiveFrame();

if (pActiveFrame==NULL) return(NULL);
return(pActiveFrame->GetActiveDocument());
}

/////////////////////////////////////////////////////////////////////////////
///////////////////////////ここにブレ-クを掛けます//////////////////////////
//////////////////////////一番始めに呼ばれて来ます //////////////////////////
// MainFrame メッセージ ハンドラ
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT /lpcs/,CCreateContext* pContext)
{
CRect FramSize;
GetClientRect(FramSize);

//---------------------
if (!m_wndSplitter.CreateStatic(this,1,2))//メイン画面は1行2列
    {
        TRACE0("Failed to create nested splitter\n");
        return FALSE;
    }
//---------------------
if (!m_wndSplitter.CreateView(0, 0, RUNTIME_CLASS(ControlPracticeView),CSize(300,FramSize.bottom), pContext))
{
    TRACE0("Failed to create third pane\n");
    return FALSE;
}
//---------------------
if (!m_wndSplitter.CreateView(0, 1, RUNTIME_CLASS(RightFormVew),CSize(980,FramSize.bottom), pContext))
{
    TRACE0("Failed to create third pane\n");
    return FALSE;
}

return TRUE;

}

/////////////////////////////////////////////////////////////////////////////
///////////////////// Vewを切り替えます ///////////////////////////
/////////////////////////////////////////////////////////////////////////////
LRESULT CMainFrame::OneVewChenger(WPARAM wParam, LPARAM lParam)
{
CDocument* pActiveDoc=EkGetActiveDocument();//現在の有効なドキュメントクラスを取得する
CControlPracticeDoc* pMyDoc;

//======================================================================================
if (pActiveDoc==NULL)
        {
        if(pActiveDoc->IsKindOf(RUNTIME_CLASS(CControlPracticeDoc))){
                    pMyDoc=static_cast<CControlPracticeDoc*>(pActiveDoc);
                    }
        }
//======================================================================================
else if(pActiveDoc->IsKindOf(RUNTIME_CLASS(CControlPracticeDoc))){
        pMyDoc=static_cast<CControlPracticeDoc*>(pActiveDoc);
        }
//======================フォ-ムビュからこの位置でブレ-クが掛かります==================
if((pMyDoc->FormVewNmcer & 0x11)==0x11) {
        pMyDoc->FormVewNmcer&=0xee;pMyDoc->UpdateAllViews(NULL,ID_FORM_LEFT_UPDATE_ID_OK_DIS  ,this)  ;}//リセット 0x11
if((pMyDoc->FormVewNmcer & 0x12)==0x12) {
        pMyDoc->FormVewNmcer&=0xed;pMyDoc->UpdateAllViews(NULL,ID_FORM_LEFT_UPDATE_ID_CANCEL_DIS,this);}//リセット 0x12
//==========================向かって右側から要求が発信されて此処で停止します===========================
if((pMyDoc->FormVewNmcer & 0x21)==0x21) {
        //OKボタンが押された時に此処で止まります    >>直ぐに返信します
        pMyDoc->FormVewNmcer&=0xde;pMyDoc->UpdateAllViews(NULL,ID_FORM_RIGHT_UPDATE_ID_OK_DIS  ,this) ;}//リセット 0x21
if((pMyDoc->FormVewNmcer & 0x22)==0x22) {         
        //CANCELボタンが押された時に此処で止まります >>直ぐに返信します
        pMyDoc->FormVewNmcer&=0xdd;pMyDoc->UpdateAllViews(NULL,ID_FORM_RIGHTUPDATE_ID_CANCSL_DIS,this);}//リセット 0x22
if((pMyDoc->FormVewNmcer & 0x44)==0x44) { 
        //印刷ボタンが押された時に此処で止まります >>直ぐに返信します
        pMyDoc->FormVewNmcer&=0xbb;pMyDoc->FormVewNmcer&=0xdd;pMyDoc->UpdateAllViews(NULL,IDS_TO_PRINT,this);}//リセット 0x44

//======================================================================================
return TRUE;

}