• MFC中 在SDI模式下的视图中添加按钮的方法


    在单文档视图(SDI)结构中,视图一般用来显示数据。但是,有时也希望在视图中显示按钮或其他的控件,以满足用户的需要。下面是手动添加按钮并使按钮具有响应事件的功能的方法。

    第一步:添加一个按钮
            首先在**View.h中定义一个按钮标识
                         define ID_BUTTON 100
            其次给C**View类添加一个成员变量
                         CButton m_myButton;   //这条语句写在**View.h的类的定义中,要声明为PUBLIC类型
            然后创建按钮实例
                         m_myButton.Create(_T("示例按钮"),  //按钮的caption属性,按钮的显示
                                                 WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON|BS_ICON, // 按钮也是一种窗体,同样有窗体风格,这些常量通过或运算使按钮达到一定的效果,这些常量的含义可以参考MSDN
                                                CRect(20,320,50,340),   //这个参数指出按钮在视图中的位置和按钮的大小。
                                                this,         //这个指针指向按钮这个窗体的父窗体
                                                ID_BUTTON);  //这是刚才为按钮定义的常量,按钮的控制ID
            然后调用函数m_MyButton.ShowWindow(SW_HIDE)这个函数根据参数的样式显示按钮,此时的参数表示隐藏按钮,如果要显示按钮,可以以SW_SHOW作为参数,这样,就是在想用到按钮的时候调用函数m_MyButton.ShowWindow(SW_SHOW)显示出按钮。
             说明:按钮在C**View::OnCreate()函数中初始化。这个函数是当窗体被创建的时候调用的一个初始化函数。像按钮这样的对象在这个时候初始化是比较合适的。
    int C**View::OnCreate(LPCREATESTRUCT lpCreateStruct) 
    {
        if (CView::OnCreate(lpCreateStruct) == -1)
            return -1;
        
        m_MyButton.Create(_T("
    示例按钮"), WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON|BS_ICON, 
         CRect(20,320,50,340), this, ID_BUTTON);
         m_MyButton.SetIcon(AfxGetApp()->LoadIcon(ICON_SAVE));  //
    给按钮加载一个图标
        m_MyButton.ShowWindow(SW_HIDE);
        
        return 0;
    }
     
    第二步:消息函数
    此时的按钮是不能响应任何消息的。下面我们手动添加按钮的消息。
    1. 声明函数原型   
           C**View类的声明中声明一个protected类型的函数
                      //{{AFX_MSG(CSoftView)
                          afx_msg void OnMyButton();
                     //}}AFX_MSG
                     通常的做法,也是VC6.0向导的做法,会将消息处理函数声明在//{{AFX_MSG(CSoftView)~~~ //}}AFX_MSG标记中,当然,在VS.NET 2003中,我们将看不到这个标记。真正起作用的是afx_msg,它表明随后的函数是一个消息处理函数。
    2. 函数的实现
          下面实现函数,显然,这个函数也是C**View类的一个成员函数,所以在**View.cpp中实现
                      void C**View::OnMyButton()
                     {
                             MessageBox("你点击了我");
                    }
     
    3. 如果这个时候你就运行程序的话,按钮依然不会响应任何事件。因为事件的产生的消息是交给视图的,所以我们需要把消息从视图传给按钮,实现起来很简单,在**View.cpp中找到如下的标记:
    BEGIN_MESSAGE_MAP(C**View, CView)
    END_MESSAGE_MAP()
    在这个标记中写入如下代码:ON_BN_CLICKED(ID_BUTTON, OnMybutton)
    这句代码是说,让ID_BUTTON所指的对象响应单击(ON_BN_CLICKED)事件,事件的处理函数是OnMybutton。这是MFC的消息映射机制。
    到此,一个可以响应单击事件的按钮就创建好了。如果要响应其他事件,可以按照这个方式创建,只需要改动这个过程中的第3步,将ON_BN_CLICKED改成希望响应的消息类型就可以了。
    资料来源:http://blog.csdn.net/ninesuns02/article/details/2514658
  • 相关阅读:
    推荐随笔
    搭建http服务
    python之numpy和pandas
    eclipse项目打包
    keras安装
    eclipse设置快速提示符
    linux常用命令
    Webpack3 从入门到放弃
    【ES6】Generator+Promise异步编程
    【Vue】删除数组元素,导致剩余元素被重新渲染
  • 原文地址:https://www.cnblogs.com/lxt287994374/p/3381736.html
Copyright © 2020-2023  润新知