vc入門寶典七(工具欄) (轉)

amyz發表於2007-08-14
vc入門寶典七(工具欄) (轉)[@more@]

工具欄:namespace prefix = o ns = "urn:schemas--com::office" />

 

/develop/author/netauthor/he_zhidan/">何志丹

主要內容:

1,  概要。

2,  常用

3,  例項。

4,  動態建立工具條

5,  在工具欄中嵌

6,  用對話方塊加點陣圖按鈕作工具條

 

我們可以在資源編輯器的ToolBar上單擊右鍵,選擇Insert ToolBar,選中一個工具欄後,在右邊雙擊它的一項就可以編輯了。我們可以用圖形工具條及顏色盒畫它的外表,它的屬性有ID,長,寬及滑鼠指向它時的說明。

一般CToolBar定義在CMainFrame中,其實現在CMainFrame的OnCreate函式中完成。

  if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP

  | CBRS_GRIPPER | CBRS_TOOL | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||

    !m_wndToolBar.LoadToolBar(IDR_MAINFRAME))

  {

    TRACE0("Failed to create toolbar ");

    return -1;  // fail to create

  }

m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);

EnableDocking(CBRS_ALIGN_ANY);

DockControlBar(&m_wndToolBar);

 

 

Bool Create(CWnd *pParentWnd,

  D dwStu;e =  WS_CHILD | WS_VISIBLE |CBRS_TOP,

  UINT  nID = AFX_IDW_TOOLBAR);

pParentWnd指定所屬視窗。

dwStyle 指定工具欄風格

CBRS_TOP      允許工具欄位於視窗頂端。

CBRS_BOTTOM      允許工具欄位於框架視窗底端

CBRS_NOALIGN      父視窗改變尺寸後工具欄位置不變

CBRS_TOOLTIPS      工具欄顯示提示條

CBRS_SIZE_DYNAMIC   工具幸是動態的

CBRS_SIZE_FIXED      工具欄是固定的

CBRS_FLOATING    工具欄是浮動的

CBRS_FLYBY    當滑鼠從命令按鈕上掠過時顯示提示資訊

CBRS_H_INPLACE    工具欄對不可見

 

SetButtonStyle()函式用來設定命令按鈕的風格或間隔區,或設為一組,按鈕的風格決定了按鈕的外貌和對使用者的反應方式.

Void SetButtonStyle(int nIndex,UINT nStyle);

nIndex  指定工具欄中按鈕或間隔的號.

nStyle  TBBS_BUTTON      標準按鈕,此為預設值

    TBBS_SEPARATOR    間隔區

    TBBS_CHECKBOX    自動確認區

    TBBS_GROUP      標記為一組按鈕的開始

    TBBS_CHECKGROUP      標記為一組確認框的開始

 

ControlBar類的EnableDocking函式和CFrameWnd類的DockControlBar函式配合,設定工具欄的可活動性.

Void   EanbleDocking(DWORD  dwStyle)

CBRS_ALIGN_TOP      允許工具欄位於客戶區上側

CBRS_ALIGN_BOTTOM    允許工具欄位於客房區下側

CBRS_ALIGN_LEFT      允許工具欄位於客戶區左側

CBRS_ALIGN_RIGHT      允許工具欄位於客戶區右側

CBRS_ALIGN_ANY      允許工具欄位於客戶區的任意位置

CBRS_FLOAT_MULTI      允許多個控制欄在一個迷你框架視窗中浮動

 

Void DockControlBar(….)

pBar  要浮動的控制欄指標.

nDockBarID指定允許浮動的位置,或為0則不允許浮動,可以由下列值組合而成:

AFX_IDW_DOCKBAR_TOP    控制欄置於框架視窗上側;

AFX_IDW_DOCKBAR_BOTTOM    控制欄置於框架視窗下側

AFX_IDW_DOCKBAR_LEFT    控制欄置於框架視窗左側

AFX_IDW_DOCKBAR_RIGHT      控制欄置於框架視窗右側

 

 

改變工具欄的命令按鈕風格,工具欄的按鈕一般預設為命令按鈕,當放開標滑鼠,命令按鈕就”彈出來”,如果我們希望命令按鈕能留在被按上的狀態,就可以把命令按鈕的風格設為確認框。在ON_UPDATE_COMMAND_UI訊息處理函式中,使用SetCheck()成員函式和SetRadio()成員函式改變按鈕狀態。

SetCheck()的引數0表示刪除狀態,1表示確認狀態,2表示不確認狀態

SetRadio()的引數0表示刪除狀態,非0表示確認狀態。

 

我們用應用嚮導建立一個單文件程式,在工具欄中新增按鈕,ID設定為ID_TIME.在CMainFrame類新增一個布林資料型別m_bTime,初始值為false.

Ctrl+w新增ID_TIME的ON_COMMANDT和ON_UPDATE_COMMAND_U訊息響應函式。

void CMainFrame::OnShowTime()

{

  m_bTime = ! m_bTime;

}

void CMainFrame::OnUpdateShowTime(CCmdUI * pCmdUI)

{

    pCmdUI ->SetCheck(m_bTime);

}

注意如果有一個同ID的選單,它會自動根據按鈕的情況打上鉤鉤。

 

事實上我們可以不用toolbar資源建立一個工具條。程式碼如下:

UINT nID[]=

  {ID_FILE_NEW,

   ID_FILE_OPEN,

   ID_TIME

  };

  m_wndToolBar.Create(this);

  m_wndToolBar.Loaitmap(IDB_BITMAP1);

  m_wndToolBar.SetButtons(nID,sizeof(nID)/sizeof(UINT));

其中點陣圖的大小要合適,否則會影響美觀,最後一行讓幾個ID與工具欄的按鈕和相關。

如果想設定每個按鈕的風格,可以將最後一行後面加:

  m_wndToolBar.SetButtonStyle(1,TBBS_SEPARATOR);

也可m_wndToolBar.Create(this);

  m_wndToolBar.LoadBitmap(IDB_BITMAP1);

  m_wndToolBar.SetButtons(NULL,3);

  m_wndToolBar.SetButtonInfo(0,ID_FILE_NEW,TBBS_BUTTON,0);

  m_wndToolBar.SetButtonInfo(1,ID_FILE_OPEN,TBBS_BUTTON,2);

 

 

在工具欄中嵌入控制元件,如編輯框

1,  定義一個編輯控制元件,不能是區域性變數,否則會被釋放掉。

2,  Create,唯一要注意的是位置要在工具條的地盤上。

CRect rect;

  m_wndToolBar.GetItemRect(1,&rect);

  edit.Create(WS_CHILD|WS_VISIBLE,rect,&m_wndToolBar,ID_EDIT);

 

用對話方塊加點陣圖按鈕作工具欄。

插入一個對話方塊,Styles的style設為child,border設為none.

在CMainFrame中m_wndToolBar的改成CDialogBar,並加一個CBitmapButton bb;

把建立工具條的那一句改為:

m_wndToolBar.Create(this,IDD_DIALOG1,WS_CHILD|WS_VISIBLE|CBRS_TOP,AFX_IDW_STATUS_BAR);

最後一上ID 同自己隨便確定。Ctrl+F5,一個極不美觀的工具條就出來了。

對按鈕進行整理,它們的處理函式仍然上Ctrl+w加。將按鈕Styles的Owner drawer和bitmap鉤上。在剛才的地方加一句。

bb.AutoLoad(IDC_BUTTON1,&m_wndToolBar);

注意你需要加三幅點陣圖(一幅也可以)。如你的按鈕的名字為X,剛三幅點陣圖的名字分別為”XUP”,”XDOWN”,”XFOCUS”,簡寫為”XU”,”XD”,”XF”.

 

 

 


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752019/viewspace-956247/,如需轉載,請註明出處,否則將追究法律責任。

相關文章