AutoCAD 3DMAX C语言 Pro/E UG JAVA编程 PHP编程 Maya动画 Matlab应用 Android
Photoshop Word Excel flash VB编程 VC编程 Coreldraw SolidWorks A Designer Unity3D
 首页 > VC编程

VC++实现工具条上的标准控件动态添加

51自学网 2015-08-30 http://www.wanshiok.com

  对组合框事件的响应

  经过上述编码,已经在工具条上空白按纽处动态创建出了一个组合框,但是仅仅创建出组合框还是不够的,为了能通过此组合框实现同用户的交互还必须编写相关代码,使其嫩够响应由组合框发出的事件消息。通常情况下对此类控件事件的响应处理是通过ClassWizard类向导来完成的,但由于此处是通过CComboBox类的Create()函数动态创建的,因此只能手动添加事件响应代码。对于组合框,其比较常用的两个事件消息是在选中一条记录时发出的CBN_SELCHANGE事件和在对组合框内文字进行编辑时产生的CBN_EDITCHANGE事件,下面就以这两个事件为例对其进行讲解,至于其他消息的处理过程可参照其进行。

  首先在头文件中给出消息响应函数的声明:

//{{AFX_MSG(CAddToToolBarView)
afx_msg void OnSelchangeCombo();//响应CBN_SELCHANGE消息的函数
afx_msg void OnEditchangeCombo();//响应CBN_EDITCHANGE消息的函数
//}}AFX_MSG
然后在实现文件中完成消息映射:
BEGIN_MESSAGE_MAP(CAddToToolBarView, CView)
//{{AFX_MSG_MAP(CAddToToolBarView)
ON_CBN_SELCHANGE(IDC_COMBOX, OnSelchangeCombo)
ON_CBN_EDITCHANGE(IDC_COMBOX, OnEditchangeCombo)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
最后在消息处理函数中完成对事件的处理过程:
void CAddToToolBarView::OnSelchangeCombo()
{
CString cs;
CMainFrame* frame=(CMainFrame*)AfxGetMainWnd();
frame->m_combobox.GetLBText(frame->m_combobox.GetCurSel(), cs);
AfxMessageBox(cs);
}
void CAddToToolBarView::OnEditchangeCombo()
{
CMainFrame* frame=(CMainFrame*)AfxGetMainWnd();
CString cs;
frame->m_combobox.GetWindowText(cs);
}

  从上述处理过程可以看出,对于在工具条上动态创建控件所发出事件的响应处理过程同手工处理消息响应的过程是非常相似的。

  对于其他控件的处理

  前面关于组合框控件在工具条上动态创建的介绍是比较有代表性的,其他标准控件的处理过程与之相比并没有什么太大的变化,只是由于控件类别的不同而在空间的创建和对控件本身的处理过程上有所不同,其思路则是完全一致的。下面再给出编辑框在工具条的创建过程。通过对这两段代码的比较可以对控件在工具条的动态创建过程有一个更好的认识:

……
// 工具条m_wndToolBar的创建代码
……
//设置组合框的宽度,四个参数依次为控件在工具条中的索引号、ID号、风格、宽度
m_wndToolBar.SetButtonInfo(9, IDC_EDIT, TBBS_SEPARATOR, 160 );
//得到组合框的位置
m_wndToolBar.GetItemRect(9, &rect);
//创建组合框,四个参数依次为窗口风格、组合框位置、父窗口、ID号
m_edit.Create (WS_VISIBLE|WS_TABSTOP,rect, &m_wndToolBar, IDC_EDIT);

  小结

  本文主要通过利用VC的资源视图来先可视化编辑标准控件在工具条中的位置,然后再把标准控件作为工具条的一个子窗口进行动态创建。基于这种思想,可以很方便地在工具条中进行其他类似处理。本文所述代码在Windows 2000 Professional下,由Microsoft Visual C++ 6.0编译通过。

 
 
说明
:本教程来源互联网或网友上传或出版商,仅为学习研究或媒体推广,wanshiok.com不保证资料的完整性。

上一篇:微软实时通信API多客户端通信实战  下一篇:制作VC++应用程序的多媒体封面