zoukankan      html  css  js  c++  java
  • 基于对话框的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 

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

    希望对你有用! 

  • 相关阅读:
    Ehcache缓存配置
    spring3使用task:annotation-driven开始定时
    Constructor >> @Autowired >> @PostConstruct
    面试转载
    阿里面试:MYSQL的引擎区别
    Redis的主从复制的原理介绍
    微服务的调用链
    java的零拷贝机制
    存储过程与触发器面试
    ABA问题
  • 原文地址:https://www.cnblogs.com/xweiwei/p/1901692.html
Copyright © 2011-2022 走看看