1. 程式人生 > >MFC CTooLBar 工具欄顯示提示資訊ToolTip

MFC CTooLBar 工具欄顯示提示資訊ToolTip

CTooLBar 工具欄顯示提示資訊ToolTip,首先新增Toolbar控制元件,網上有多種實現方式,推薦兩種:

一:

在資源裡新增ToolBar控制元件,在對話方塊OnInitDialog裡關聯,設定:

BOOL CWeldTechnologyDlg::OnInitDialog()
{
	CDialogEx::OnInitDialog();

.............
	m_wndToolBar.CreateEx(this,TBSTYLE_FLAT,WS_VISIBLE|WS_CHILD|CBRS_TOP|CBRS_GRIPPER|CBRS_TOOLTIPS|CBRS_SIZE_DYNAMIC|CBRS_BORDER_TOP);
	m_wndToolBar.LoadToolBar(IDR_TOOLBAR1);		//載入工具欄資源
	m_wndToolBar.GetToolBarCtrl().SetBitmapSize(CSize(102,48));		//設定影象大小
	m_wndToolBar.GetToolBarCtrl().SetButtonSize(CSize(102,48));		//設定工具欄圖示按鈕的大小
	//顯示工具欄
	RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0);


	INIT_EASYSIZE; 

	return TRUE;
}

二:

直接程式碼生成ToolBar,也是在OninitDialog中新增如下程式碼:

BOOL CToolTipDlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	
	// TODO: Add extra initialization here
	UINT array[10];
	for (int i = 0;i<10;i++)
	{
		if (i==3 || i==7)
			array[i]= ID_SEPARATOR; //第4、8個按鈕為分隔條
		else
			array[i]=i+1001;
	}
	m_ToolBar.Create(this);
	m_ToolBar.SetButtons(array,10);
	m_ToolBar.SetButtonText(0,"新建");
	m_ToolBar.SetButtonText(1,"開啟");
	m_ToolBar.SetButtonText(2,"儲存");
	m_ToolBar.SetButtonText(4,"剪下");
	m_ToolBar.SetButtonText(5,"複製");
	m_ToolBar.SetButtonText(6,"貼上");
	m_ToolBar.SetButtonText(8,"列印");
	m_ToolBar.SetButtonText(9,"幫助");
	m_ToolBar.LoadBitmap(IDB_BITMAP1);			   //載入點陣圖
	m_ToolBar.SetSizes(CSize(36,36),CSize(16,16)); //設定按鈕和按鈕點陣圖大小
	m_ToolBar.EnableToolTips(TRUE);
	RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0); //顯示工具欄
	return TRUE;  // return TRUE  unless you set the focus to a control
}

設定好了,新增工具欄ToolTip:

在.h檔案裡宣告訊息:

	afx_msg BOOL OnToolTipNotify( UINT id, NMHDR * pNMHDR, LRESULT * pResult );

在.cpp下關聯訊息
BEGIN_MESSAGE_MAP(CWeldTechnologyDlg, CDialogEx)
	

	ON_NOTIFY_EX( TTN_NEEDTEXT, 0, OnToolTipNotify)
END_MESSAGE_MAP()

新增響應程式碼:
BOOL CWeldTechnologyDlg::OnToolTipNotify(UINT id, NMHDR *pNMHDR, LRESULT *pResult)
{
	TOOLTIPTEXT *pTTT = (TOOLTIPTEXT *)pNMHDR;
	CString str;
	UINT nID =pNMHDR->idFrom; //獲取工具欄按鈕ID
	if(nID)
	{
		nID = m_wndToolBar.CommandToIndex(nID); //根據ID獲取按鈕索引
		if (nID != -1)
		{
			switch(nID)
			{
			case 0:
				pTTT->lpszText  = L"中心點設定";
				break;
			case 1:
				pTTT->lpszText  = L"焊板設定";
				break;
			case 2:
				pTTT->lpszText  =L"焊層設定";
				break;
			case 3:
				pTTT->lpszText  =L"焊道工藝設定";
				break;
			case 4:
				pTTT->lpszText  =L"生成焊點軌跡";
				break;
			default:
				pTTT->lpszText = L" ";
				break;

			}

			//獲取工具欄文字			
			pTTT->hinst = AfxGetResourceHandle();
			return(TRUE);
		}
	}
	return(FALSE);
}