Visual C++ 2005圖像編程之工具欄
在這個圖像處理工具軟件中,需要實現的工具欄比較多。我想讓每個工具欄都在浮動的時候沒有關閉按鈕,同時在工具箱Toolbar中還可以設置工具欄顯示的列數。根據類抽象的原則,我們給所有的工具欄建立一個基類CBaseToolBar,從CToolBar派生。CBaseToolBar需實現
在這個圖像處理工具軟件中,需要實現的工具欄比較多。我想讓每個工具欄都在浮動的時候沒有關閉按鈕,同時在工具箱Toolbar中還可以設置工具欄顯示的列數。根據類抽象的原則,我們給所有的工具欄建立一個基類CBaseToolBar,從CToolBar派生。CBaseToolBar需實現的主要功能有:浮動時去掉關閉按鈕和設置工具欄的列數。
從
Visual Studio.Net開始,包括
Visual C++ 2005,去掉了Visual C++ 6.0中類向導功能。一些概念上也發生了變化??梢园鄠€工程的Workspace被Solution替代,稱為一個
解決方案。
在
Visual C++ 2005添加一個新的類,只需要在解決方案資源管理器中選擇相應的工程,右鍵點擊的彈出菜單中選擇添加類,就會彈出添加類的向導對話框。如下圖:
在出現的類向導對話框中,選擇添加MFC類,然后點擊添加按鈕,最后選擇CToolBar做為基類,派生類名輸入CBaseToolBar。
Visual C++ 2005中的向導功能比Visual C++ 6.0更完善,選擇功能更豐富了。如果是想在6.0版本中添加CToolBar的派生類是無法直接選擇CToolBar類的,一般采用的方法是先選擇CToolBarCtrl,添加完成后再采用手動修改的方法改為CToolBar,而現在可以直接選擇CToolBar,省去了很多麻煩。
建立好CToolBar的派生類,我們看看如何實現設置工具欄列數和去掉關閉按鈕。設置列數時我們給類添加一個函數:void SetColumns(int nColumn);給某個特定的類添加函數需要先從解決方案資源管理器切換到類視圖,這里會顯示所有的類。在對應的類名上的右鍵彈出菜單中選擇添加函數或者變量:如下圖:
MILY: 宋體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'" twffan="done">
|
在隨后出現添加函數對話框,提供了非常豐富的功能,直接鼠標點擊就可以為函數加上virtual、static、inline等關鍵字。
設定好函數的返回類型和名稱后,就添加參數。參數名框輸入第一個參數的名稱,然后點擊添加按鈕這個參數就被添加到右邊的參數列表里。同時在下面的函數簽名中可以預覽函數的形式。是不是感覺功能比以前更豐富,使用更簡單。添加完后在CPP文件中加入函數的實現代碼:
clearcase/" target="_blank" >cccccc" width="90%" align="center" bgcolor="#e1e1e1" border="1">
void CBaseToolBar::SetColumns(int nColumns)
{
int nCount = GetToolBarCtrl().GetButtonCount();
for (int i = 0; i < nCount; i++)
{
UINT nStyle = GetButtonStyle(i);
BOOL bWrap = (((i + 1) % nColumns) == 0);
if (bWrap)
nStyle |= TBBS_WRAPPED; //或上TBBS_WRAPPED風格就是換行
else
nStyle &= ~TBBS_WRAPPED;
SetButtonStyle(i, nStyle);
}
Invalidate();
GetParentFrame()->RecalcLayout();
} |
設置列數的功能完成,接著看如何去掉浮動關閉按鈕。如果里曾經用向導建立過基于對話框的程序,那么你注意了在對話框的OnInitDialog函數里,有默認生成的將“關于...”菜單項添加到系統菜單中的代碼??闯隽它c什么——其實標題欄上的右鍵和關閉按鈕可以通過系統菜單進行控制。所以我們實現去掉浮點時的參數和關閉按鈕也可以從這里開始。首先我們要判斷工具欄時浮點還是??康?,這個可以通過WM_WINDOWPOSCHANGED消息得到通知。
在Visual C++ 2005給某個類添加消息映射函數,同樣在類視圖里選擇相應的類,然后在右邊彈出屬性設置界面,如果這個屬性設置框沒有出現,可以通過工具欄按鈕打開界面:
在屬性設置界面中,存在過濾的工具欄,選擇第五個的消息事件按鈕,下面就列出了此類所有可用的消息,選擇對應的消息,在右邊的下拉框你添加消息響應函數即可。選擇消息的時候最下面還會有消息的一些說明幫助我們理解這個消息。
在WM_WINDOWPOSCHANGED消息函數里,我們先判斷工具欄是否處于??繝顟B,如果是浮動狀態就去掉系統菜單。這里需要注意的時,雖然在界面上看工具欄時浮動非??康?,實際上工具欄是??吭谝粋€CMiniFrameWnd框架里。我們這里所指的系統菜單就是這個CMiniFrameWnd的系統菜單。
void CBaseToolBar::OnWindowPosChanged(WINDOWPOS FAR* lpwndpos)
{
CToolBar::OnWindowPosChanged(lpwndpos);
if(IsFloating())
{
if(m_pDockBar) // m_pDockBar指向??康拇翱趯ο?br/>
{
//如果??看翱谑?CMiniFrameWnd就去掉系統菜單
//在IsFloating函數為FALSE的時候這個m_pDockBa的父窗口就是主框架
CWnd* pParent = m_pDockBar->GetParent();
if( pParent->IsKindOf(RUNTIME_CLASS(CMiniFrameWnd)))
pParent->ModifyStyle(WS_SYSMENU, 0, 0 );
}
}
} |
現在我們實現這2個基本的功能。在介紹的過程中,我特別的加入了一些圖片,希望給那些對Visual C++ 2005不熟悉的朋友提供一些幫助。在后續的介紹中就不會再做介紹了。
原文轉自:http://www.kjueaiud.com
- 評論列表(網友評論僅供網友表達個人看法,并不表明本站同意其觀點或證實其描述)
-
老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月
|