程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> 關於VC++ >> 如何在工具欄上添加平面下拉控件

如何在工具欄上添加平面下拉控件

編輯:關於VC++

效果圖如下:

使用過WordXP的人都知道,她的界面可謂是耳目一新。尤其是她的菜單和工具條可真是酷。網上也有很多很多的人都在模仿著她,包括很多的軟件公司的產品。她的出現,使得軟件界刮起了一陳XP界面時尚風。廢話就不再多話了,言歸正題,下面我就將實現的步驟一步步地告訴給你。

第一步:新建一個單文檔項目

第二步:到資源編輯器中,新增一個工具項。裡面沒內容的,資源就命名為ID_TOOL_ZOOM吧。呵呵,新增一個工具項與我的下拉控件有什麼關系呀?當然有關系,因為一會那個下拉控件就是在這個位置上顯示出來的。

第三步:派生新類,從CToolBar派生,類名就叫CMainToolBar。怎樣派生,我只提示你一下,菜單Insert->New Class…。在Class Type中選Generic Class,如果不選的話…你試試吧。

第四步:由於我們要有一個下拉框,所以呢得在CMainToolBar中聲明一個CComboBox對象,聲明如下:

public:
CComboBox m_wndZoom;

第五步:用新類代替舊類。替換之前,得將新類的聲明文件包含進來,在MainFrm.h文件上,加上這句#include "MainToolBar.h"。然找到 CToolBar m_wndToolBar;用CMainToolBar 代替CToolBar。

第六步:在CMainFrm的OnCreate函數最後(當然是return 0之前了),添加下面的代碼:

int index = 0;
RECT rect;
//找到指定的工具項
while(m_wndToolBar.GetItemID(index)!=ID_TOOL_ZOOM)
   index++;
//設置指定工具項的寬度並獲取新的區域 80是寬度
m_wndToolBar.SetButtonInfo(index, ID_TOOL_ZOOM, TBBS_SEPARATOR, 80);
m_wndToolBar.GetItemRect(index, &rect);
//設置位置
rect.top+=2;
rect.bottom += 200;
// 創建並顯示控件
if(!m_wndToolBar.m_wndZoom.Create(WS_CHILD|WS_VISIBLE| CBS_AUTOHSCROLL| CBS_DROPDOWNLIST | CBS_HASSTRINGS , rect,
&m_wndToolBar, ID_TOOL_ZOOM))
{ 
 TRACE0("Failed to create combo-box\n");
    return FALSE;
}
m_wndToolBar.m_wndZoom.ShowWindow(SW_SHOW);
//填充內容
m_wndToolBar.m_wndZoom.AddString("25%");
m_wndToolBar.m_wndZoom.AddString("50%");
m_wndToolBar.m_wndZoom.AddString("75%");
m_wndToolBar.m_wndZoom.AddString("100%");
m_wndToolBar.m_wndZoom.AddString("125%");
m_wndToolBar.m_wndZoom.AddString("150%");
m_wndToolBar.m_wndZoom.AddString("175%");
m_wndToolBar.m_wndZoom.AddString("200%");
//選擇默認項
m_wndToolBar.m_wndZoom.SetCurSel(3);

添加好了,運行一遍看看。呵,真的可以。不過,還存在著三個問題還需解決,一:工具條不夠高。二:下列框不是平面控件。三:如何處理消息。下面我在一一解決:

問題一:工具條不夠高

解決特別容易,進入資源管理器,打開工具。隨便找個工具項,設置其Height屬性為20。這樣工具條就增高了。

問題二:下列框不是平面控件 這個也容易解決,用別人的類就行了。我在這用的是Kirk Stowell的CFlatComboBox。示例程序已經包含這個類進來了。用ProjectàAdd to ProjectàFile…將FlatComboBox.h和FlatComboBox.Cpp文件添加進工程中。然後到MainToolBar.h中將CFlatComboBox類包含進來,當然是用#include "FlatComboBox.h"。最後用CFlatComboBox類代替CComboBox 類。 重新編譯,運行一遍看看,是不是平面了?

問題三:如何處理消息 是啊,到現在為至。這控件只能看,不能用,有什麼意義呢。所以我們還得處理他的消息,讓他有活可干。我們不能指望著ClassWizard能幫上我們什麼忙,因為ClassWizard上看不到這個消息,所以一切都得靠我們自己。 在CMainFrm類上,我們要在protected裡添加afx_msg void OnSelectZoomed();函數。然後轉到MainFrm.cpp文件上,找到BEGIN_MESSAGE_MAP,增加一句ON_CBN_SELENDOK(ID_TOOL_ZOOM, OnSelectZoomed)。然後呢,當然就是要實現它的處理函數了,處理函數如下:

void CMainFrame::OnSelectZoomed()
{
//獲取到內容並MSGBOX顯示出來
  CString strContent;
  m_wndToolBar.m_wndZoom.GetWindowText(strContent);
  AfxMessageBox(strContent);  //彈出選擇的內容
}

小功告成,然後又是編譯、運行。看看界面,確實是平面的、有控控件的工具條。

作者注:很久沒寫作文了,這是我出社會後寫的第一篇作文,寫的不好請多多包涵!

我的Email是[email protected] 有什麼好東西希望能發個給我

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