如何在formview里显示属性选项卡propertysheet
2015-06-05 10:11
176 查看
因为要做图形学大作业,所以又和MFC杠上了。这次打算做一个嵌套在基于CDialog创建的FormView类里的propertysheet,以前没做过,所以也是小小折腾了一下,特此记录以备忘
先上最后的效果图吧~
左边的属性框就是这次做出的效果啦~
左右两个子窗口是在MainFrm里用CSplitterWnd分出来的,左边的窗口是FormView类,里面包含着一个PropertySheet类,而在PropertySheet类里又包含着两个PropertyPage类。
具体建立方法:
先在资源窗口里插入一个新的Dialog,右键添加类名叫CSelectFormView,基类为FormView。然后在项目->类向导->添加类,新建一个PropertySheet类,起名为SelectSheet。再回到资源窗口,新建两个Dialog,右键添加类,起名CSelectPage1和2,基类都是PropertyPage类。要特别注意建立对话框的时候style都要把默认的popup改成child,
好了,准备工作做完了,现在的解决方案管理器应该长这样:
现在我们可以开始代码部分了~
拆分窗口部分的代码我就象征性地贴一下,不做解释记录
好啦,现在我们有了两个子窗口~接下来就是正戏!
首先在SelectFormView类向导里添加虚函数OnInitialUpdate
另外pSheet的Create函数,第三个参数用默认初始值就可以,所以我把第一个Create函数注释掉了。
这块函数只是在FormView里放了个Sheet,接下来是在Sheet里放两个Page
好啦,这么几行代码下来,就可以建立开头的那个窗口了。
关于MFC的内容,查看http://www.jizhuomi.com/software/257.html,讲的非常详细!
先上最后的效果图吧~
左边的属性框就是这次做出的效果啦~
左右两个子窗口是在MainFrm里用CSplitterWnd分出来的,左边的窗口是FormView类,里面包含着一个PropertySheet类,而在PropertySheet类里又包含着两个PropertyPage类。
具体建立方法:
先在资源窗口里插入一个新的Dialog,右键添加类名叫CSelectFormView,基类为FormView。然后在项目->类向导->添加类,新建一个PropertySheet类,起名为SelectSheet。再回到资源窗口,新建两个Dialog,右键添加类,起名CSelectPage1和2,基类都是PropertyPage类。要特别注意建立对话框的时候style都要把默认的popup改成child,
好了,准备工作做完了,现在的解决方案管理器应该长这样:
现在我们可以开始代码部分了~
拆分窗口部分的代码我就象征性地贴一下,不做解释记录
//MainFrm.h public: CSplitterWnd m_wndSplitter;
//MainFrm.cpp BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext) { // TODO: 在此添加专用代码和/或调用基类 if (!m_wndSplitter.CreateStatic(this,1,2,WS_CHILD|WS_VISIBLE)) { TRACE("Failed to create static splitter\n"); return FALSE; } if (!m_wndSplitter.CreateView(0,0,RUNTIME_CLASS(CSelectFormView),CSize(340,200),pContext)) { TRACE("Failed to create property view\n"); return FALSE; } if (!m_wndSplitter.CreateView(0,1,RUNTIME_CLASS(CRenderScene),CSize(1020,200),pContext)) { TRACE("Failed to create render view\n"); return FALSE; } return TRUE; }
好啦,现在我们有了两个子窗口~接下来就是正戏!
首先在SelectFormView类向导里添加虚函数OnInitialUpdate
//SelectFormView.cpp void CSelectFormView::OnInitialUpdate() { CFormView::OnInitialUpdate(); // TODO: 在此添加专用代码和/或调用基类 CSelectSheet *pSheet = new CSelectSheet(_T("TEST"),this,NULL); //pSheet ->Create(this, WS_CHILD | WS_VISIBLE/*|WS_TILEDWINDOW*/, WS_EX_TOPMOST); pSheet ->Create(this,WS_CHILD | WS_VISIBLE); RECT rect; this->GetClientRect(&rect); //pSheet->SetWindowPos(NULL,0,0,rect.right-rect.left,rect.bottom-rect.top,SWP_NOMOVE|SWP_NOZORDER|SWP_NOACTIVATE); pSheet->MoveWindow(0,0,rect.right-rect.left,rect.bottom-rect.top,TRUE); pSheet ->ShowWindow(SW_SHOW); }之前我没有添加pSheet->MoveWindow,用的是SetWindowPos。虽然选项卡的样子出来了,但是位置并不对齐FormView窗口的左上角。具体原因还没搞清楚……
另外pSheet的Create函数,第三个参数用默认初始值就可以,所以我把第一个Create函数注释掉了。
这块函数只是在FormView里放了个Sheet,接下来是在Sheet里放两个Page
//SelectSheet.h public: CSelectPage1 m_SelectPage1; CSelectPage2 m_SelectPage2;
//SelectSheet.cpp CSelectSheet::CSelectSheet(UINT nIDCaption, CWnd* pParentWnd, UINT iSelectPage) :CPropertySheet(nIDCaption, pParentWnd, iSelectPage) { AddPage(&m_SelectPage1); AddPage(&m_SelectPage2); } CSelectSheet::CSelectSheet(LPCTSTR pszCaption, CWnd* pParentWnd, UINT iSelectPage) :CPropertySheet(pszCaption, pParentWnd, iSelectPage) { AddPage(&m_SelectPage1); AddPage(&m_SelectPage2); }
好啦,这么几行代码下来,就可以建立开头的那个窗口了。
关于MFC的内容,查看http://www.jizhuomi.com/software/257.html,讲的非常详细!
相关文章推荐
- Linux下查看文件和文件夹大小
- .top域名6月初市场报告:注册量半月增幅超2万
- linux学习笔记
- Linux+RTAI实时内核编译所遇到的问题及解决方法
- top命令解释以及如何查看系统CPU运作情况
- nginx+ keepalived+proxy_cache实现nginx高可用及高速缓存
- Xquartz远程访问linux
- linux 实时操作系统简介
- shell基本命令
- Open CASCADE Technology: IGES Support
- SVN Working copying 'xxxxx/xxxx/xxxx' locked
- Jersey eclipse tomcat maven (helloword)
- linux点滴0
- 一些优化Nginx服务器的技巧简介
- linux安装mysql提示conflicts with file from package的解决办法
- 仓储订单生产节点监控
- CentOS常用到的查看系统命令
- ubuntu14.04安装dropbox
- apache_getenv()函数在phpstudy中 apache+php5.4n 5.3n都不行
- centos终端中mysql中文显示乱码的处理