注意:本人使用VC++2010开发环境进行測试。
在使用VC开发对话框程序时不像开发单文档程序和多文档程序那么方便,非常多资源都须要自己手动加入。近期在开发一个程序时。想尝试在对话框程序里面加入
工具栏 及其 buttontooltip,于是便有了这篇文章,希望把经验总结下来以方便自己以后查询以及各位同仁查询!
一、首先建立一个对话框程序
1、加入工具栏资源,并在工具栏资源里加入几个button,并将button的width 和 height 改为24,也能够依据自己的须要更改尺寸。同一时候,还要为对应的button设置一个ID。
详细操作如图:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveGJtb3hpYQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" >
二、创建工具栏
1、在***Dlg.h加入工具栏对象, 以及位图资源
private: CToolBar m_ToolBar; // 位图资源 CBitmap m_bitmap1; CBitmap m_bitmap2; CBitmap m_bitmap3; CImageList m_ImageList;
2、在OnInitDialog()函数里面加入下面代码,创建工具栏
if( !m_ToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_ALIGN_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS ) || !m_ToolBar.LoadToolBar(IDR_TOOLBAR1)) { TRACE0("未能创建工具栏\n"); AfxMessageBox(_T("未能创建工具栏\n")); return FALSE; // 未能创建 } m_ToolBar.ShowWindow(SW_SHOW); //控件条定位 RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0);
3、加载几个24*24尺寸的位图,注意。该尺寸是依据上面button的尺寸而设定的。
4、在以上 第2 步后面的代码添载入入位图的代码。终于如图
if( !m_ToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_ALIGN_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS ) || !m_ToolBar.LoadToolBar(IDR_TOOLBAR1)) { TRACE0("未能创建工具栏\n"); AfxMessageBox(_T("未能创建工具栏\n")); return FALSE; // 未能创建 } m_ToolBar.ShowWindow(SW_SHOW); //控件条定位 RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0); m_bitmap1.LoadBitmapW(IDB_BITMAP_MULTIMETER); m_bitmap2.LoadBitmapW(IDB_BITMAP_PHONE); m_bitmap3.LoadBitmapW(IDB_BITMAP_SPEAKER); m_ImageList.Create(24,24, ILC_COLOR32 | ILC_MASK,0,0); m_ImageList.Add(&m_bitmap1, RGB(0, 0, 0)); m_ImageList.Add(&m_bitmap2,RGB(0, 0, 0)); m_ImageList.Add(&m_bitmap3,RGB(255, 255, 255)); m_ToolBar.GetToolBarCtrl().SetImageList(&m_ImageList);
至此。便已并执行程序。能够看到程序界面就有我们加入上句的工具栏button图标,如图:
以上已经实现了为工具栏button加入图标的功能。那怎样为工具栏button加入tooltip功能能。例如以下图的效果:
接着就由本人继续介绍操作步骤:
1、在***Dlg.h 头文件加入 消息处理函数声明:
afx_msg BOOL OnToolTipText(UINT, NMHDR* pNMHDR, LRESULT* pResult); // 工具条提示
2、在***Dlg.cpp加入消息映射
BEGIN_MESSAGE_MAP(CSageRemoteKeyTestDlg, CDialogEx) ...... ON_NOTIFY_EX_RANGE(TTN_NEEDTEXT, 0, 0xffff, OnToolTipText) END_MESSAGE_MAP()
3、加入函数定义
BOOL ***Dlg::OnToolTipText(UINT, NMHDR* pNMHDR, LRESULT* pResult) { TOOLTIPTEXT *pTTT=(TOOLTIPTEXT*)pNMHDR; UINT uID=pNMHDR->idFrom; // 相当于原WM_COMMAND传递方式的wParam(low-order), 在wParam中放的则是控件的ID。 if(pTTT->uFlags & TTF_IDISHWND) uID=::GetDlgCtrlID((HWND)uID); if(uID==NULL) return FALSE; switch(uID) { case IDOK: pTTT->lpszText= _T("按下此键開始測试"); break; case IDM_POWER_MULTIMETER: pTTT->lpszText= _T("电表配置"); break; case IDM_SHIELDINGBOX_COM: pTTT->lpszText= _T("串口配置"); break; case IDM_BEEP: pTTT->lpszText= _T("蜂鸣器配置"); break; } return TRUE; }
至此,编译执行程序就能实现上图的tooltip功能了!
时间: 2024-10-24 18:58:04