单文档添加按钮

转载 2015年11月19日 17:56:05

1)在窗户的客户区内添加按钮及其响应函数


第一步:添加一个按钮
        首先在**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改成希望响应的消息类型就可以了。

/////////////////////////////////////////////////////////////////////////////////

在单文档的工具栏中添加按钮及其响应函数

在工具栏上的图标就是菜单栏中的快捷项。

比如工具栏的“打开”按钮,其ID就是菜单栏文件下“打开”选项的ID,故只需在工具栏上添加一个按钮,然后在菜单栏下建一个选项即可,二者ID设置相同。再对菜单栏下对应选项创建command响应函数(利用ClasWizard,在CMainFrame中添加Command消息映射即可)。

 

例如:

在Toolbar下添加一个按钮

 
VC <wbr>单文档添加按钮


双击工具栏中的T按钮,设置ID

VC <wbr>单文档添加按钮

再在菜单栏下添加一个选项

VC <wbr>单文档添加按钮

给菜单栏下的T选项添加消息响应函数:

在T上右击—>class wizard,MessageMaps:class name选择 CMain Frame,找到ID_ToolbarT,点击COMMAND,再点击ADD Function,Editing Code,在消息响应函数中添加一句:

AfxMessageBox(“hello world”);

编译,运行,点击T按钮后,

 VC <wbr>单文档添加按钮


把菜单栏的“测试”菜单去掉后,工具栏中的T按钮仍可用。




        

在单文档视图(SDI)结构中,视图一般用来显示数据。但是,有时也希望在视图中显示按钮或其他的控件,以满足用户的需要。
VC6.0没有直接给出在视图中添加按钮的向导(或许有,我没找到)。下面我将给出一个手动添加按钮并使按钮具有响应事件 的功能。
第一步:添加一个按钮  
首先在**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改成希望响应的消息类型就可以了。

vs2010mfc单文档中添加对话框中的控件

今天才发现,原来单文档中有个叫f
  • lh1162810317
  • lh1162810317
  • 2014年04月13日 12:53
  • 4314

单文档程序中添加编辑框的方法

本人在做一个网络口监视工具的时候,需要在单文档程序中添加两个编辑框控件,用来显示发送和接收的数据内容。开始的时候在VIEW类中画接收到数据,感觉很麻烦,于是上网找类似的例子,才发现自己走了弯路,原来前...
  • kehui123
  • kehui123
  • 2009年09月27日 16:32
  • 2164

MFC单文档下为视图类添加按钮及其响应函数(手把手截图)

MFC接触也是比较久了,最开始看的是孙鑫的《VC++深入详解》,看了前面几章。后来又看了侯捷的那本《深入浅出MFC》,看的时候居然常常想起孙鑫的那本书,感觉还是侯捷更厉害,从头自己编写,最后整本书实际...
  • yaked
  • yaked
  • 2015年03月20日 21:52
  • 4758

MFC单文档窗口添加按钮控件

原文:http://blog.sina.com.cn/s/blog_6d0cbb0301018u1w.html 单文档的添加按钮不能像对话框直接拖按钮,需要手动添加。 在MFC...
  • qq_35040828
  • qq_35040828
  • 2016年06月20日 11:22
  • 1830

VS2013MFC单文档工程学习笔记二 - 新建一个按钮

首先在VIEW头文件中找到类 复制这代码进去 private: CButton anniu1; 复制到类里 这样就声明了一个按钮 然后添加按钮的ID号,就是声明他的ID号,要特别的不能和其他的控...
  • asaqlp
  • asaqlp
  • 2015年06月11日 08:00
  • 2366

MFC 单文档标题栏菜单按钮重绘

1、在MainFrame中实现 OnMeasureItem和OnDrawItem函数 void CMainFrame::OnMeasureItem( int nIDCtl, LPMEASUREITEM...
  • lijie0073237
  • lijie0073237
  • 2016年03月30日 15:41
  • 660

MFC中实现单击按钮关闭单文档系统

摘自:xdhywj的专栏     http://blog.csdn.net/xdhywj/article/details/7986320   一、方法一:通过找到主窗口的句柄,然后向主窗口发送...
  • xiaojun111111
  • xiaojun111111
  • 2015年05月04日 09:46
  • 646

如何去掉MFC单文档右上角的关闭按钮

 在CMainFrame的OnCreate函数的return 0;前加上下面的代码即可。 CMenu* pMenu=GetSystemMenu(false); UINT nID=pMenu->G...
  • starain2000
  • starain2000
  • 2014年11月20日 15:52
  • 615

MFC 单文档添加ListView方法片段

先建立MFC类listviewtest并继承CListView 然后重写OnInitialUpdate() void ShowListView::OnInitialUpdate() { CListV...
  • liyu1128
  • liyu1128
  • 2013年10月29日 13:16
  • 1707

VS2013/MFC编程入门之一(利用MFC向导生成单文档应用程序框架)

关于VS2013和MSDN如何安装,网上有很多教程,再次就不在赘述,相信大家都已经安装好了。本次MFC编程全程使用简体中文专业版VS2013 进行操作。这一讲给大家一个简单的例子,演示如何生成单文档应...
  • zhaoyinhui0802
  • zhaoyinhui0802
  • 2016年11月22日 22:11
  • 4266
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:单文档添加按钮
举报原因:
原因补充:

(最多只允许输入30个字)