VC 對話框程序加入工具欄button圖標及其buttontooltip
註意:本人使用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功能了!
VC 對話框程序加入工具欄button圖標及其buttontooltip