SDI在视图类中添加按钮以及消息响应

在单文档视图(SDI)结构中视图一般用来显示数据。但是,有时也希望在视图中显示按钮或其他的控件,以满足用户的需要。

下面将给出一个手动添加按钮并使按钮具有响应事件功能的实例。

第一步:添加一个按钮

首先,在**View.h中定义一个按钮标识 #define ID_BUTTON 100

其次,给C**View类添加一个成员变量 CButton m_btnButton;   //这条语句写在**View.h的类的定义中,要声明为PUBLIC类型

然后在**View类的 OnCreate(LPCREATESTRUCT lpCreateStruct) 函数中创建按钮实例。这个消息通常还需要手动添加,具体步骤为:

**View.h中添加消息声明:afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);

添加消息命令 ON_WM_CREATE()

关于创建OnCreate这个函数

m_btnButton.Create(_T("示例按钮"),  //按钮的caption属性,按钮的显示

                                   WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON|BS_ICON, // 按钮也是一种窗体,同样有窗体风格,这些常量通过或运算使按钮达到一定的效果,这些常量的含义可以参考MSDN

                    CRect(20,320,50,340),   //这个参数指出按钮在视图中的位置和按钮的大小

                    this,         //这个指针指向按钮这个窗体的父窗体

                    ID_BUTTON);  //这是刚才为按钮定义的常量,按钮的控制ID,然后调用函数m_btnButton.ShowWindow(SW_HIDE)这个函数根据参数的样式显示按钮,此时的参数表示隐藏按钮,如果要显示按钮,可以以SW_SHOW作为参数,这样,就是在想用到按钮的时候调用函数m_btnButton.ShowWindow(SW_SHOW)显示出按钮

         说明:按钮在C**View::OnCreate()函数中初始化。这个函数是当窗体被创建的时候调用的一个初始化函数。像按钮这样的对象在这个时候初始化是比较合适的。

 

最后在**View.cpp添加这个消息的实现。代码如下:

int C***View::OnCreate(LPCREATESTRUCT lpCreateStruct)   

{  

if (CView::OnCreate(lpCreateStruct) == -1) 

{

return -1;   

}

m_btnButton.Create(_T("示例按钮"), WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON|BS_ICON, CRect(20,320,50,340), this, ID_BUTTON);

m_btnButton.SetIcon(AfxGetApp()->LoadIcon(ICON_SAVE));  //给按钮加载一个图标

m_btnButton.ShowWindow(SW_HIDE);

return 0; 

 

第二步:消息函数

此时的按钮是不能响应任何消息的。还需要自己手动添加按钮的消息。具体过程如下:

1、声明函数原型    

 在C**View类的声明中声明一个protected类型的函数

    //{{AFX_MSG(CSoftView)

    afx_msg void OnMyButton();

    //}}AFX_MSG

 真正起作用的是afx_msg,它表明随后的函数是一个消息处理函数。

2、函数的实现

下面实现函数,显然,这个函数也是C**View类的一个成员函数,所以在**View.cpp中实现

     void C**View::OnMyButton()

     {

//输出Hello

        MessageBox(_T("Hello"));

 }

 

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改成希望响应的消息类型就可以了。

注:上述过程和MFC自定义消息比较类似,可以参考 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

法哥2012

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值