vc入门宝典七(工具栏)

类别:VC语言 点击:0 评论:0 推荐:

工具栏

                    

何志丹

主要内容:

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_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||

              !m_wndToolBar.LoadToolBar(IDR_MAINFRAME))

       {

              TRACE0("Failed to create toolbar\n");

              return -1;      // fail to create

       }

m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);

EnableDocking(CBRS_ALIGN_ANY);

DockControlBar(&m_wndToolBar);

 

 

Bool Create(CWnd *pParentWnd,

          DWORD 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_HIDE_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.LoadBitmap(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”.

 

 

 

本文地址:http://com.8s8s.com/it/it1813.htm