文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>基于对话框的MFC程序中加视图

基于对话框的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 } 

 

 我是用第一个方法实现的,第二个方法没试过,有兴趣可以试下。其实不要把视图当作多么高深的东西,视图其实也可以简单看做一个控件,像其他普通控件,如按钮等一样需要初始化,创建,使用,销毁。就是这么简单而已。

希望对你有用! 

 

 

相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载