基于对话框的MFC程序中加视图
时间:2010-12-09 来源:wayne xue
看网上的一些方法,主要有两种实现形式:一种是直接在对话框中创建视图。 还有一种是用子类化。
先谈第一种:
先在对话框中定义自己的视图对象 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 }
28 用这种方法需要重载视图类的PostNcDestroy和OnMouseActivate两个函数
29 void MyView::PostNcDestroy()
30 {
31 }
32 int MyView::OnMouseActivate(CWnd* pDesktopWnd, UINT nHitTest, UINT message)
33 {
34 return MA_NOACTIVATE;
35 }
第二重方法是子类化:
在对话框上放一个简单空间比如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 }
我是用第一个方法实现的,第二个方法没试过,有兴趣可以试下。其实不要把视图当作多么高深的东西,视图其实也可以简单看做一个控件,像其他普通控件,如按钮等一样需要初始化,创建,使用,销毁。就是这么简单而已。
希望对你有用!
相关阅读 更多 +