VC 对话框程序加入工具栏button图标及其buttontooltip

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了VC 对话框程序加入工具栏button图标及其buttontooltip相关的知识,希望对你有一定的参考价值。

注意:本人使用VC++2010开发环境进行測试。

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


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

      1、加入工具栏资源,并在工具栏资源里加入几个button,并将button的width 和 height 改为24,也能够依据自己的须要更改尺寸。同一时候,还要为对应的button设置一个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尺寸的位图,注意。该尺寸是依据上面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功能了!




















以上是关于VC 对话框程序加入工具栏button图标及其buttontooltip的主要内容,如果未能解决你的问题,请参考以下文章

vc 在程序运行中如何修改按钮上的文字

VC 如何获取一个控件内的字体

高分急求:VC中鼠标移到按钮上后,更改按钮图片的实现代码

vc6.0 mfc窗口问题

为啥我安装的vc6.0之后,编译程序的时候总会出现这个图标呢?

VC6.0中 如何将 LIST control中的信息读取到文本编辑框中