// 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