如何优雅的写UI——(2)MFC下基于CFormView的文档视图程序
在MFC中可以创建多种类型的窗口程序,如对话框程序、单文档结构程序(非文档/视图结构)、单文档(文档/视图结构)以及多文档视图结构程序等。
在编写一般的小工具时,我们的首选显然是对话框程序,不过基于对话框的程序不支持视图类,有些功能实现起来会麻烦许多。此时我们可以使用CFormView作为基类来创建单文档(非文档/视图结构)和单文档(文档/视图结构)的程序。
一、使用MFC向导创建程序
(1)单文档(文档/视图结构)
(2)不需要状态栏和工具栏
(3)使用CFormView作为基类
(4)使用向导创建好的程序窗口
二、程序初始化设置
在这个由MFC向导创建的程序窗口中有些功能或许是我们不想要的,比如视图标题、视图凹陷效果、菜单栏、鼠标拖动窗口边框调整窗口大小等。
1. 不显示视图标题、禁止以拖动方式调整窗口大小、禁用菜单栏
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs) { if( !CFrameWnd::PreCreateWindow(cs) ) return FALSE; // TODO: 在此处通过修改 // CREATESTRUCT cs 来修改窗口类或样式 cs.style &= ~FWS_ADDTOTITLE; /* 不显示视图标题 */ cs.style &= ~WS_THICKFRAME; /* 禁止以拖动方式调整窗口大小 */ cs.hMenu = NULL; return TRUE; }
2. 去除视图凹陷效果
BOOL CTestView::PreCreateWindow(CREATESTRUCT& cs) { // TODO: 在此处通过修改 // CREATESTRUCT cs 来修改窗口类或样式 cs.style &= ~WS_BORDER; /* 去除视图凹陷效果 */ return CFormView::PreCreateWindow(cs); }
3. 修改程序窗口标题
BOOL CTestApp::InitInstance() { .... .... .... m_pMainWnd->SetWindowText( L"测试程序" ); /* 修改程序窗口标题 */ // 唯一的一个窗口已初始化,因此显示它并对其进行更新 m_pMainWnd->ShowWindow(SW_SHOW); m_pMainWnd->UpdateWindow(); // 仅当具有后缀时才调用 DragAcceptFiles // 在 SDI 应用程序中,这应在 ProcessShellCommand 之后发生 return TRUE; }
结果:
下一篇我会教大家如何动态创建好看的选项卡
代码:tab.zip
赌上我的人生为梦想,即使是臭名远扬,也要我的名字响彻天堂