MFC VIEW多窗口分割使用 和CHtml等等14.5.4

// MFCqf.cpp : Defines the entry point for the application.
//

#include "stdafx.h"
#include "resource.h"

UINT nIdicatiors[]={
    ID_SEPARATOR,
    ID_INDICATOR_NUM,
    ID_INDICATOR_REC

};
//创建VIEW
class CMyView1:public CView{
    //定义宏 做动态创建
    DECLARE_DYNCREATE(CMyView1)
    DECLARE_MESSAGE_MAP()
public:
    virtual void OnDraw(CDC*pDC);
public:
    //定义了一个消息 但是这个消息只能在当前View激活时 消息才能激活

    afx_msg void OnTest();
};
//动态创建的实现
IMPLEMENT_DYNCREATE(CMyView1,CView)
BEGIN_MESSAGE_MAP(CMyView1,CView)
    ON_COMMAND(ID_TEST,OnTest)  
END_MESSAGE_MAP()
void CMyView1::OnTest(){

    AfxMessageBox("Test");
}
void CMyView1::OnDraw(CDC *pDC){
    
    pDC->TextOut(100,100,"View1");
}

//创建HTMLVIEW
class CMyView2:public CHtmlView{
    //定义宏 做动态创建
    DECLARE_DYNCREATE(CMyView2)
public:
  virtual void OnInitialUpdate();
};
//动态创建的实现
IMPLEMENT_DYNCREATE(CMyView2,CHtmlView)

void CMyView2::OnInitialUpdate(){
    Navigate2("http://www.baidu.com/");
}
//消息映射
class WqfFrame:public CFrameWnd{
    DECLARE_MESSAGE_MAP()
public:
    //创建切分窗口 函数重写
    virtual BOOL OnCreateClient(LPCREATESTRUCT lpcs,
                              CCreateContext *pContext);
public:
    afx_msg int OnCreate(LPCREATESTRUCT lpCreate);
    afx_msg void OnExit();
public:
    CToolBar m_wndToolBar;
    CStatusBar m_wndStatusBar;
    CSplitterWnd m_wndSplitter;

    CSplitterWnd m_wndSplitterRight;
};
BEGIN_MESSAGE_MAP(WqfFrame,CFrameWnd)
    ON_WM_CREATE()
    ON_COMMAND(ID_EXIT,OnExit)
END_MESSAGE_MAP()
//退出
void WqfFrame::OnExit(){
    PostQuitMessage(0);
}
//创建窗口执行函数
int WqfFrame::OnCreate(LPCREATESTRUCT lpCreate){
    //判断是否执行父类函数
    CFrameWnd::OnCreate(lpCreate);
    //创建工具栏
    m_wndToolBar.CreateEx(this);
    m_wndToolBar.LoadToolBar(IDR_MAINFRM);
    //设置工具栏可以停靠边缘
    m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
    //设置窗口可以停靠边缘
    EnableDocking(CBRS_ALIGN_ANY);
    DockControlBar(&m_wndToolBar);

    //创建状态栏
    m_wndStatusBar.CreateEx(this);
    //状态栏设置属性参数
    m_wndStatusBar.SetIndicators(nIdicatiors,
        sizeof(nIdicatiors)/sizeof(UINT));
    ModifyStyleEx(WS_EX_CLIENTEDGE,0);
    return 0;
}

BOOL WqfFrame::OnCreateClient(LPCREATESTRUCT lpcs,
                              CCreateContext *pContext)
{
    //静态切分窗口
    m_wndSplitter.CreateStatic(this,
        1,2);
    //创建切分窗口的子窗口
    //我们的窗口m_wndSplitter 分成了1行2列 而我们m_wndSplitterRight是嵌套在
    //m_wndSplitter.IdFromRowCol(0,1) 就表示了创建窗口放在后面一列里的
    //第一个参数表示加载到那个view里m_wndSplitter
    //第二三 表示几行几列
    m_wndSplitterRight.CreateStatic(&m_wndSplitter,3,1,
        WS_CHILD|WS_VISIBLE,m_wndSplitter.IdFromRowCol(0,1));


    m_wndSplitter.CreateView(0,0,
        RUNTIME_CLASS(CMyView1),
        CSize(200,200),pContext);
    //上面吧m_wndSplitterRight设置为2个窗口 现在定义两个窗口
    //这个就想TABLE TR TD合并了 等
    m_wndSplitterRight.CreateView(0,0,
        RUNTIME_CLASS(CMyView2),
        CSize(200,200),pContext);
    m_wndSplitterRight.CreateView(1,0,
        RUNTIME_CLASS(CMyView2),
        CSize(200,200),pContext);
    m_wndSplitterRight.CreateView(2,0,
        RUNTIME_CLASS(CMyView2),
        CSize(200,200),pContext);

    CMyView2 *pView2=(CMyView2 *)m_wndSplitterRight.GetPane(1,0);
    pView2->Navigate2("D:\\");
    return true;
/*SetRowInfo/SetColumnInfo 设置行列的大小信息
    //SetActivePane/GetActivePane 设置获取当前激活的pane
    //GetPane 获取指定位置的PANE视图窗口指针
    //动态切分窗口
    //获取CMyView1运行时类信息
    CCreateContext context;
    context.m_pNewViewClass=
        RUNTIME_CLASS(CMyView1);
    //创建动态View 第二 第三代表能切多少个参数
    m_wndSplitter.Create(this,2,2,CSize(50,50),
        &context);
    return 1;
    */
}
class WqfApp:public CWinApp{

public:
    virtual BOOL InitInstance();
};
WqfApp theApp;

BOOL WqfApp::InitInstance(){

    WqfFrame *pWnd=new WqfFrame();
    pWnd->LoadFrame(IDR_MAINFRM);
    m_pMainWnd=pWnd;
    m_pMainWnd->ShowWindow(SW_SHOW);
    m_pMainWnd->UpdateWindow();
    
    return 1;
}
源程序连接 http://pan.baidu.com/s/1i3ifAxn

你可能感兴趣的:(MFC VIEW多窗口分割使用 和CHtml等等14.5.4)