VC6中动态创建控件并响应其消息(button/combo)

描述:
本文讲述了如何在VC6下动态创建控件并响应其消息。
 技术实现:
 在基于对话框的程序里我们创建控件的方法大多是直接拉一个控件上去,然后利用ClassWizard给控件添加变量及进行消息映射等。但在有些时候(如单文档或多文档程序)我们就无法直接拉这个控件,更无法用ClassWizard给他添加变量或进行消息映射了。
在本文中我们将以在对话框上动态添加一个按钮(CButton)与一个下拉框(CCombobox)为例子说明在VC6下如何动态创建控件并响应控件之消息。

1.     创建按钮并响应其BN_CLICKED事件

(1)  添加成员变量

   CButton* m_rBtn;

(2)  创建按钮
        m_rBtn = new CButton();

m_rBtn->Create("按钮1",BS_PUSHBUTTON|WS_VISIBLE|WS_CHILD,CRect(250,250,320,270),this,10004);

(3)  添加消息响应函数
在类的头文件里加下如下函数声明:
afx_msg void OnPushButton1();
在类的实现文件里加下函数实现:

void CTestDlg::OnPushButton1()

{
AfxMessageBox("Button1 is pushed!");
}
添加映射宏:
BEGIN_MESSAGE_MAP(CTestDlg, CDialog)
             //{{AFX_MSG_MAP(CAsdfsaDlg)
             ON_WM_SYSCOMMAND()
             ON_WM_PAINT()
             ON_WM_QUERYDRAGICON()
             ON_BN_CLICKED(IDC_BUTTON1, OnButton1)
             ON_BN_CLICKED(10004, OnPushButton1)
             //}}AFX_MSG_MAP
END_MESSAGE_MAP()

         OK,现在已经完成了一个动态按钮的创建并实现了其消息的响应了。

2.     创建CComboBox并响应其CBN_SELCHANGE事件
(1)  添加成员变量

CComboBox m_wndCombo;

(2)  创建CComboBox
 CRect   rect;  
rect.left   =   100;  
rect.top   =   100;  
rect.right   =   300;  
rect.bottom   =   500;  
m_wndCombo.Create(WS_CHILD | WS_VISIBLE | CBS_DROPDOWNLIST ,rect,this,6011);  
m_wndCombo.MoveWindow(100,100,300,600);  //调节下拉框的大小,如果内容超过大小,则出现滚动条
for( int i=0; i<10; i++ )
{
CString xx;
xx.Format( "fadfadsf[%d]", i );
m_wndCombo.AddString( xx );

}

(3)  添加消息响应函数
在类的头文件里加下如下函数声明:
afx_msg void OnSelchangeCombo1();
在类的实现文件里加下函数实现:
void CTestDlg::OnSelchangeCombo1()
{
                 // TODO: Add your control notification handler code here
                 AfxMessageBox( "asaaaaaaaaaaaaaaaaaaaa" );
}
 添加映射宏:
BEGIN_MESSAGE_MAP(CTestDlg, CDialog)
             //{{AFX_MSG_MAP(CAsdfsaDlg)
             ON_WM_SYSCOMMAND()
             ON_WM_PAINT()
             ON_WM_QUERYDRAGICON()
             ON_BN_CLICKED(IDC_BUTTON1, OnButton1)
             ON_BN_CLICKED(10004, OnPushButton1)
            ON_CBN_SELCHANGE(6011, OnSelchangeCombo1)  //在ctl类的cpp文件内添加,6011是Combo资源在resource.h内注册时候的ID
             //}}AFX_MSG_MAP
END_MESSAGE_MAP()

         OK,现在已经完成了一个动态CComboBox的创建并实现了其消息的响应了。


注:其中最后一个参数6011与1005等,是ID号,一定要大于100,因为100以内为VC编译系统使用。


  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值