对话框和MDI中动态创建按钮CButton,并响应事件

原文:http://blog.csdn.net/tmljs1988/article/details/6219168

 

一.对话框中动态创建按钮CButton:
(1)在对话框(如CAboutDlg)的类中加一个CButton数据成员
class CAboutDlg : public CDialog
{ ......
::CButton m_btn;//按钮
}

(2)在对话框CAboutDlg)的初始化函数中创建按钮对象:
BOOL CAboutDlg::OnInitDialog()
{
if ( !m_btn.Create( _T("123"), WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,
CRect(  0,60,20,70),this, ID_BUTTON2)
)
{
  TRACE0("未能创建按钮/n");
  return FALSE;      // 未能创建
}

return TRUE;
}
其中BS_PUSHBUTTON表示是下压按钮(普通按钮),ID_BUTTON2为用户定义的按钮的ID号,以便与事件响应

函数绑定,ID_BUTTON2应有前面定义:
如 #define ID_BUTTON2 2000

(3)将按钮的ID号ID_BUTTON2与事件响应函数绑定:
(3.1)事件响应函数的声明:
class CAboutDlg : public CDialog
{ ......
::CButton m_btn;//按钮

afx_msg void OnBnClickedButton1();//事件声明,前面一定要加afx_msg
}
(3.2)按钮的ID号ID_BUTTON2与事件响应函数绑定
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
......
ON_BN_CLICKED(ID_BUTTON2, &CAboutDlg::OnBnClickedButton1)
END_MESSAGE_MAP()
(3.3)事件响应函数的定义:
void CAboutDlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
MessageBox( _T("donow"));
}

========================================================================
二.MDI中动态创建按钮CButton:
(A)在视图view中创建CButton(按钮会显示在view窗口内):
(1)在CMDI_testView类中加入CButton的数据成员:
class CMDI_testView : public CView
{ ......
::CButton m_btn;//按钮
}
-------------------------
(2)重载OnCreate():
----------
(2.1)OnCreate()声明:
class CMDI_testView : public CView
{ ......
::CButton m_btn;//按钮

int OnCreate(LPCREATESTRUCT lpCreateStruct);
}
------------
(2.2)拦截OnCreate(),注意,此处一定要,否则不会调用OnCreate()函数
BEGIN_MESSAGE_MAP(CMDI_testView, CView)
ON_WM_CREATE() //拦截OnCreate()
ON_BN_CLICKED( ID_BUTTON1, &CMDI_testView::MSG)//ID_BUTTON1为按钮ID号,与MSG()绑定
END_MESSAGE_MAP()
-------------
(2.3)OnCreate()定义:
int CMDI_testView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CView::OnCreate(lpCreateStruct) == -1)
  return -1;

if ( !btn.Create( _T("123"), WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON, CRect

(10,60,70,100),this, ID_BUTTON1))
//如果ID号是IDOK,但程序中没有把IDOK与某消息函数绑定也不行.
{
  TRACE0("未能创建按钮/n");
  return -1;      // 未能创建
}


return 0;
}
---------------------------------------
(3)定义按钮的事件处理函数MSG():
-------------
(3.1)MSG()声明:
class CMDI_testView : public CView
{ ......
::CButton m_btn;//按钮

afx_msg void MSG();//事件声明,前面一定要加afx_msg
}
-------------
(3.2)按钮的ID号ID_BUTTON2与MSG()函数绑定:
BEGIN_MESSAGE_MAP(CMDI_testView , CView)
......
ON_WM_CREATE() //拦截OnCreate()
ON_BN_CLICKED( ID_BUTTON1, &CMDI_testView::MSG)//ID_BUTTON1为按钮ID号,与MSG()绑定
END_MESSAGE_MAP()
-------------
(3.3)MSG()定义:
void CMDI_testView ::MSG()
{
// TODO: 在此添加控件通知处理程序代码
MessageBox( _T("donow"));
}

===========================================
特别注意:
(1)最好在视图view中创建CButton,这样可以响应按钮事件.如果是在CChildFrame或CMainFrame内创建

CButton,则只能显示按钮,但不能响应事件!!!!!!
这可能是因为在MDI(或SDI)中view挡在Mainframe的前面。此时假如编写针对Mainframe的mouseClick

事件,将不会有反应.


(2)ON_BN_CLICKED消息是CButton发送的唯一感兴趣的消息。它等同于CWnd中的ON_COMMAND消息,只是

一个更简单方便的同义词而已。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值