您的位置:首页 > 其它

VC 对话框程序添加工具栏按钮图标及其按钮tooltip

2014-10-16 11:50 441 查看
注意:本人使用VC++2010开发环境进行测试。

在使用VC开发对话框程序时不像开发单文档程序和多文档程序那么方便,很多资源都需要自己手动添加。最近在开发一个程序时,想尝试在对话框程序里面添加
工具栏 及其 按钮tooltip,于是便有了这篇文章,希望把经验总结下来以方便自己以后查询以及各位同仁查询!

一、首先建立一个对话框程序

1、添加工具栏资源,并在工具栏资源里添加几个按钮,并将按钮的width 和 height 改为24,也可以根据自己的需要更改尺寸,同时,还要为相应的按钮设置一个ID。具体操作如图:







二、创建工具栏

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尺寸的位图,注意,该尺寸是根据上面按钮的尺寸而设定的。







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);


至此,便已并运行程序,可以看到程序界面就有我们添加上句的工具栏按钮图标,如图:



以上已经实现了为工具栏按钮添加图标的功能,那如何为工具栏按钮添加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功能了!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: