以文本方式查看主题

-  计算机科学论坛  (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程序中加视图?
【转自互联网】


这个一个比较神奇的问题,起因是有一次程序需要,需要将显示图像的区域变成有滚动条形式,这就不得不考虑用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 }

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

  希望对你有用!


W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
31.250ms