基于各种视图单文档框架的创建

来源:互联网 发布:大型网络 编辑:程序博客网 时间:2024/06/05 22:50

首先创建一个普通的单文档程序,去掉文档/视图结构:



2、依据上面的创建方式,视图为默认视图,而且不能再创建向导中更改视图。用类向导创建一个CMainView 类:

class CMainView : public CListView{DECLARE_DYNCREATE(CMainView)public:CMainView();           // 动态创建所使用的受保护的构造函数virtual ~CMainView();public:#ifdef _DEBUGvirtual void AssertValid() const;#ifndef _WIN32_WCEvirtual void Dump(CDumpContext& dc) const;#endif#endifprotected:DECLARE_MESSAGE_MAP()public:virtual void OnInitialUpdate();};

3.在主框架的头文件中创建CMainView的对象:

class CMainFrame : public CFrameWnd{public:CMainFrame();protected: DECLARE_DYNAMIC(CMainFrame)//......public:CMainView*    m_pMainView;// ......};

4、在OnCreate()函数中创建基于自己的视图,注销掉原来创建的视图:

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct){if (CFrameWnd::OnCreate(lpCreateStruct) == -1)return -1;// 创建一个视图以占用框架的工作区/*if (!m_wndView.Create(NULL, NULL, AFX_WS_DEFAULT_VIEW, CRect(0, 0, 0, 0), this, AFX_IDW_PANE_FIRST, NULL)){TRACE0("未能创建视图窗口\n");return -1;}*/CCreateContext cc;cc.m_pNewViewClass = RUNTIME_CLASS(CMainView);m_pMainView = (CMainView*)CreateView(&cc,AFX_IDW_PANE_FIRST );if (!m_wndStatusBar.Create(this)){TRACE0("未能创建状态栏\n");return -1;      // 未能创建}m_wndStatusBar.SetIndicators(indicators, sizeof(indicators)/sizeof(UINT));return 0;}

5.对下面两个函数进行一些适当的修改:

// CMainFrame 消息处理程序void CMainFrame::OnSetFocus(CWnd* /*pOldWnd*/){// 将焦点前移到视图窗口m_pMainView->SetFocus();}BOOL CMainFrame::OnCmdMsg(UINT nID, int nCode, void* pExtra, AFX_CMDHANDLERINFO* pHandlerInfo){// 框架将消息分发给视图if (m_pMainView && m_pMainView->OnCmdMsg(nID, nCode, pExtra, pHandlerInfo))return TRUE;// 否则,执行默认处理return CFrameWnd::OnCmdMsg(nID, nCode, pExtra, pHandlerInfo);}

这样就更改了单文档的视图。


下面进行一些简单的测试:

void CMainView::OnInitialUpdate(){CListView::OnInitialUpdate();CListCtrl& List = GetListCtrl();List.ModifyStyle(0,LVS_REPORT);List.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES );List.InsertColumn(0,"第一列",0,100);List.InsertColumn(1,"第一列",0,100);}



注:如果在创建单文档的过程中,勾上:文档/视图结构支持 选项,则在创建向导中可以自行更改视图的类型。

阅读全文
0 0
原创粉丝点击