基于对话框的MFC程序中加视图

这个一个比较神奇的问题,起因是有一次程序需要,需要将显示图像的区域变成有滚动条形式,这就不得不考虑用scrollview类来实现。

看网上的一些方法,主要有两种实现形式:一种是直接在对话框中创建视图。 还有一种是用子类化。 

 先谈第一种: 

先在对话框中定义自己的视图对象 
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 

 

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

希望对你有用! 

 

 

转载于:https://www.cnblogs.com/xweiwei/archive/2010/12/09/1901692.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值