程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> vc教程 >> 在VC++工具欄按鈕上添加文本標簽

在VC++工具欄按鈕上添加文本標簽

編輯:vc教程

  一、前 言

  對於工具欄,我想大家一定不陌生,它直觀,使用方便,它給應用程序的用戶帶來極大的方便.對VC++程序員來說,為自己開發的軟件加上一個工具欄並不難,幾乎每本介紹VC++的書都少不了介紹這方面的內容,並且,如果在開發初期就想加入工具欄的話,就更簡單了,MFC 可自動為您生成工具欄.可是我們所說的這些工具欄都有一個共同的特點,它們的每個工具按鈕上只有一個位圖直觀地向用戶顯示它的功能,將鼠標移動到某個工具按鈕上後,很快就彈出一個標簽(ToolTips),以文字的形式表明它的功能.

  作為微軟用戶,我們最熟悉的莫過於微軟的浏覽器了,它的工具欄是可以定制的,可以在工具按鈕上只顯示位圖,並采取ToolTips技術,也可在工具欄上同時顯示位圖和文本標簽(可謂"圖文並茂").我想如果我們的軟件也有這個功能的話,會不會使得我們的軟件對用戶更友好,使用更方便呢? 本文詳細介紹了實現的具體步驟並給出完整的示例工程供參考。

 
  示例代碼運行效果圖

  二、主要函數

  下面我們就來介紹這個功能的實現,首先介紹幾個相關的函數:

  1.CToolBar::SetSizes(SIZE sizeButton,SIZE sizeImage)

  我想不用介紹,朋友們也都能猜出這個函數的功能了吧.它用於設置工具按鈕的大小以及它上面的位圖的大小.這個函數有兩個參數,其中,sizeButton用於指定按鈕的大小,sizeImage用於指定位圖的大小.需注意的是:這兩個參數的cx域和cy域都必須大於零,並且,sizeButton的寬度(cx)至少要比sizeImage的寬度大7,高度(cy)至少大6.

  2.CToolBar::SetButtonText(int nIndex , LPCTSTR lpstText)

  這個函數用於設置工具按鈕上所顯示的文字,nIndex用於指定所設置的工具按鈕在工具欄中基於0的索引值(包括分割符),即第nIndex+1個工具按鈕將被設置,lpstText就是指定所要顯示的文字了.

  3.CToolBar::EnableToolTips(BOOL bEnable)

  這個函數用於設置/取消工具按鈕的ToolTips功能.

  4.CMainFrame::ShowControlBar(CControlBar * pBar,BOOL bShow, BOOL bDelay)

  這個函數用於設置工具欄或狀態欄的顯示與否.

  pBar: 指向被設置工具欄或狀態欄對象的指針

  bShow: 為TRUE,則顯示工具欄或狀態欄 否則隱藏;

  bDelay: 為TRUE,則延遲顯示時間,否則立刻顯示工具欄或狀態欄

  三、前期工作

  了解了這幾個函數後,我們就可以為工具欄添加文本標簽了.

  首先我們為CMainFrame類添加兩個變量

  1)BOOL類型的成員變量m_bTextTips,可以是私有變量,用於存儲文本標簽顯示與否的狀態.

  2)SIZE類型的成員變量m_sizeMax,用於存儲按鈕的最大尺寸---www.bianceng.cn

  方法:在Workspace窗口的ClassVIEw視圖中右鍵單擊CMainFrame類,在彈出的快捷菜單中單擊Add Member Variable...菜單項.在彈出的對話框中如下輸入即可:

 

  我們先進行用戶界面的編寫,如下:

  1.在CMainFrame類的結構函數CMainFrame()中加入m_bTextTips的初始化代碼,如下:

  CMainFrame::CMainFrame() {
    m_bTextTips=AfxGetApp()->GetProfileInt("Setting","m_bTextTips",1);
}在此我們使用了函數CWinApp::GetProfileInt("Setting","m_bTextTips",1),它的原形是這樣的:

  UINT GetProfileInt( LPCTSTR lpszSection, LPCTSTR lpszEntry, int nDefault );

  它和下面的函數CWinApp::Write rofileInt("Setting","m_bTextTips",m_bTextTips)搭配使用,

  對該函數的使用,您可參考幫助文件,本文不再贅述.

  2.在CMainFrame類的析構函數~CMainFrame()中加入如下代碼保存文本標簽的顯示狀態:

  CMainFrame::~CMainFrame() {    AfxGetApp()->WriteProfileInt("Setting","m_bTextTips",m_bTextTips);
}

  3.加入相應的菜單項,用於控制文本標簽的顯示與否,如下:


  在屬性對話框中,選中Checked復選框,ID號為:ID_TOOL_TEXTTIPS.

  4.用ClassWizard加入該菜單項的命令處理函數和接口更新處理函數,並加入以下代碼:

  void CMainFrame::OnToolTexttips()
  {
    m_bTextTips = !m_bTextTips; } void CMainFrame::OnUpdateToolTexttips(CCmdUI* pCmdUI) {
    pCmdUI->SetCheck(m_bTextTips);
}

  三、功能實現

  以上完成了用戶接口的編寫工作,然後添加文本標簽,步驟如下:

  1.在CMainFrame類的實現文件開始部分假如靜態數組,用於存放文本標簽,如下:

  #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__;
#endif static TCHAR *TextTips[] = {"新建","打開","存盤","","剪切","復制","粘貼","","打印","","關於",""};2.用ClassWizard為CMainFrame添加一成員函數:void CMainFrame::UpdateToolBar(BOOL bRecalc = TRUE);用於更新工具條

  void CMainFrame::UpdateToolBar(BOOL bRecalc) //bRecalc用於指示是否重新計算最大尺寸 {
CRect rect;
SIZE sizeButton,sizeImage;
if(bRecalc) {
m_sizeMax.cx = 0;
m_sizeMax.cy = 0;
//取得最大尺寸
for (int i=0;i<m_wndToolBar.GetCount();i++) {
m_wndToolBar.SetButtonText(i,TextTips[i]);
m_wndToolBar.GetItemRect(i,rect);
m_sizeMax.cx = __max(rect.Size().cx, m_sizeMax.cx);
m_sizeMax.cy = __max(rect.Size().cy, m_sizeMax.cy);
}
}
//設置按鈕尺寸 sizeButton.cx = m_bTextTips ? m_sizeMax.cx : 23;
sizeButton.cy = m_bTextTips ? m_sizeMax.cy : 22;
sizeImage.cx = 16;
sizeImage.cy = 15;
m_wndToolBar.SetSizes(sizeButton,sizeImage); ShowControlBar(&m_wndToolBar,FALSE,FALSE); ShowControlBar(&m_wndToolBar,TRUE,FALSE);
m_wndToolBar.RedrawWindow();
}3.在CMainFrame::OnCreate()函數中,就在return 0;之前加入如下代碼:

  UpdateToolBar();///更新工具條
return 0;4.實現控制菜單的功能,在菜單的命令處理函數中加入粗體代碼:

  void CMainFrame::OnToolTexttips()
  { m_bTextTips = !m_bTextTips; UpdateToolBar(FALSE);///FALSE參數表示不重新計算最大按鈕 }5.為了使Windows系統參數改變後能夠自動調整工具條大小,我們需要添加WM_SETTINGCHANGE消息處理函數OnSettingChange,並加入粗體代碼:

  void CMainFrame::OnSettingChange(UINT uFlags, LPCTSTR lpszSection)
  { CFrameWnd::OnSettingChange(uFlags, lpszSection); UpdateToolBar();
} 至此,所有任務已經完成,請編譯並運行該程序,單擊TextTips按鈕,OK!

  注:本文假定您的程序已經加入了工具欄.

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved