以文本方式查看主题 - 计算机科学论坛 (http://bbs.xml.org.cn/index.asp) -- 『 C/C++编程思想 』 (http://bbs.xml.org.cn/list.asp?boardid=61) ---- 如何基于对话框的MFC程序中加视图? (http://bbs.xml.org.cn/dispbbs.asp?boardid=61&rootid=&id=88853) |
-- 作者:葛靖青001 -- 发布时间:12/22/2010 3:31:00 PM -- 如何基于对话框的MFC程序中加视图? 【转自互联网】 看网上的一些方法,主要有两种实现形式:一种是直接在对话框中创建视图。 还有一种是用子类化。 先谈第一种: 先在对话框中定义自己的视图对象 MyView*m_pView; 在对话框的CPP中 1 CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD) //构造函数 2 { 3 m_pView = NULL; 4 } 5 void CAboutDlg::OnDestroy() 6 { 7 if(m_pView) 8 { 9 m_pView-> DestroyWindow(); 10 delete m_pView; 11 } 12 CDialog::OnDestroy(); 13 } 14 BOOL CAboutDlg::OnInitDialog() 15 { 16 CDialog::OnInitDialog(); 17 18 CRect rect; 19 GetClientRect(&rect); 20 21 if(!m_pView) 22 { 23 m_pView = new MyView; 24 m_pView-> Create(NULL,NULL,WS_CHILD|WS_VISIBLE,rect,this,AFX_IDW_PANE_LAST); 25 } 26 return TRUE; 27 } 第二重方法是子类化: 在对话框上放一个简单空间比如RECTANGLE,然后在对话框重定义视图的对象 MyView*m_pView; 在对话框的CPP中 1 CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD) 2 { 3 m_pView = NULL; 4 } 5 BOOL CAboutDlg::OnInitDialog() 6 { 7 CDialog::OnInitDialog(); 8 9 if(!m_pView) 10 { 11 m_pView = new MyView; 12 m_pView-> SubclassDlgItem(IDC_STATIC1,this); 13 } 14 15 return TRUE; 16 } 17 void CAboutDlg::OnDestroy() 18 { 19 if(m_pView) 20 { 21 m_pView-> UnsubclassWindow(); 22 delete m_pView; 23 } 24 CDialog::OnDestroy(); 25 } 26 在视图中重载OnEraseBkgnd函数 27 BOOL MyView::OnEraseBkgnd(CDC* pDC) 28 { 29 CRect rect; 30 CBrush Brush(RGB(255,255,255)); 31 GetClientRect(&rect); 32 pDC-> FillRect(&rect,&Brush); 33 return TRUE; 34 } 我是用第一个方法实现的,第二个方法没试过,有兴趣可以试下。其实不要把视图当作多么高深的东西,视图其实也可以简单看做一个控件,像其他普通控件,如按钮等一样需要初始化,创建,使用,销毁。就是这么简单而已。 希望对你有用! |
W 3 C h i n a ( since 2003 ) 旗 下 站 点 苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》 |
31.250ms |