MFC--CToolBar

来源:互联网 发布:win7 windows无法访问 编辑:程序博客网 时间:2024/05/17 04:05
1 创建 

CToolBar    m_wndToolBar;
BOOL Create( CWnd* pParentWnd, DWORD dwStyle = 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:工具栏不显示。
nID:标识工具栏ID。
BOOL CreateEx(CWnd* pParentWnd, DWORD dwCtrlStyle = TBSTYLE_FLAT, DWORD dwStyle = WS_CHILD | WS_VISIBLE | CBRS_ALIGN_TOP,

CRect rcBorders = CRect(0, 0, 0, 0), UINT nID = AFX_IDW_TOOLBAR);
参数说明
pParentWnd:标识父窗口。
dwCtrlStyle:标识工具栏扩展风格。
dwStyle:标识工具栏风格。
rcBorders:标识工具栏边框的宽度。
nID:标识工具栏ID。

宽展属性的解释如下:

TBSTYLE_ALTDRAG
   允许用户按下ALT键,通过拖拽来工具栏按钮来改变它的位置。如果这个风格没有指定,那么用户必须按下SHIFT键来拖拽工具栏按钮。注意CCS_ADJUSTABLE风格必须指定,使工具栏按钮可以被拖拽。
TBSTYLE_CUSTOMERASE
版本4.70.当工具栏处理WM_ERASEBKGND消息时,产生一个NM_CUSTOMDRAW通知消息。
TBSTYLE_FLAT
版本4.70. 创建一个浮动的工具栏。在浮动的工具栏中,工具栏和按钮都是透明的,并且热追踪(hot-tracking)是激活的。按钮的文字显示在按钮图像的下面。为了避免重画的问题,这个风格应该设置在工具栏控件显示之前。
TBSTYLE_LIST
版本4.70. 创建一个按钮文字显示在图像右边的浮动的工具栏。其他的与TBSTYLE_FLAT相同。
TBSTYLE_REGISTERDROP
版本4.71. 当鼠标通过工具栏按钮上方的时候,产生一个TBN_GETOBJECT通知消息去请求目标对象下沉。
TBSTYLE_TOOLTIPS
创建一个TOOLTIP空间,在工具栏应用程序就可以显示按钮的说明信息。
TBSTYLE_TRANSPARENT
版本4.71.创建一个透明的工具栏。在透明的工具栏中,工具栏是透明的但是按钮不是透明的。按钮的文字显示在按钮图像的下方。为了避免重绘的问题,这个风格必须在工具栏控件可见前设定。
TBSTYLE_WRAPABLE
创建一个可以有多行按钮的工具栏。当工具栏太窄而不能在一行中容纳所有的按钮,工具栏按钮可以“裹到”下一行。如果工具栏是被包裹的,并且工具栏中没有分隔符,那么断点就会出现在最右边的分隔符或最右边的按钮。当工具栏是rebar空间的垂直部分的时候,这个风格必须设置显示垂直工具栏控件。
BTNS_AUTOSIZE
版本5.80. 指定了这个风格,那么就不应该为工具栏控件的按钮指定标准的宽度。按钮的宽度是文字的宽度加上按钮图像的宽度。在版本4.72下或者更早的版本下,可以使用等价的风格标志,TBSTYLE_AUTOSIZE。
BTNS_CHECK
版本5.80.创建一个有2种状态的按钮。当按钮按下时,它会有不同的背景颜色。在版本4.72下或者更早的版本下,可以使用等价的风格标志,TBSTYLE_CHECK。
BTNS_CHECKGROUP
版本5.80.创建一个会保持按下状态,直到同一组的其他按钮被按下的按钮,类似于选择按钮(radio button)。它等价于BTNS_CHECK和BTNS_GROUP。在版本4.72下或者更早的版本下,可以使用等价的风格标志,TBSTYLE_CHECKGROUP。
BTNS_DROPDOWN
版本5.80.创建一个当被单击就可以显示一个列表的下拉风格的按钮。下拉按钮发送TBN_DROPDOWN通知消息,取代一般按钮的WM_COMMAND消息。然后应用程序可以有通知消息处理器来显示选择的列表。在版本4.72下或者更早的版本下,可以使用等价的风格标志,TBSTYLE_DROPDOWN。
BTNS_GROUP
版本5.80.当和BTNS_CHECK联合使用时,创建一个会保持按下状态,直到同一组的其他按钮被按下的按钮。在版本4.72下或者更早的版本下,可以使用等价的风格标志,TBSTYLE_GROUP。
BTNS_NOPREFIX
版本5.80.指定没有任何加速器的前缀与按钮文字相关联。在版本4.72下或者更早的版本下,可以使用等价的风格标志,BTNS_NOPREFIX。
BTNS_SEP
版本5.80. 创建一个分隔符,在按钮组之间提供小的间隔。拥有这个风格的按钮不接受任何输入。在版本4.72下或者更早的版本下,可以使用等价的风格标志,TBSTYLE_SEP。
BTNS_SHOWTEXT
版本5.81. 指定按钮文字必须被现实。所有的按钮都可以有文字,不过只有拥有BTNS_SHOWTEXT风格的这些按钮可以显示文字。这种按钮风格必须与TBSTYLE_LIST和TBSTYLE_EX_MIXEDBUTTONS一起使用。如果你为按钮设置文字而不指定BTNS_SHOWTEXT风格,当鼠标停留在按钮上方,工具栏控件把文字当做会提示文本(ToolTip)自动显示它。这个特性允许你的应用程序避免处理TBN_GETINFOTIP通知消息。
BTNS_WHOLEDROPDOWN
版本5.80.指定按钮会有下拉箭头,但不作为同一个分割区间。拥有这个风格的按钮表现相同,不管是否设置了TBSTYLE_EX_DRAWDDARROWS风格。

2 设置

设置宽高
void SetSizes( SIZE sizeButton, SIZE sizeImage ); //该方法用于设置按钮和位图的大小,后面的参数比前面的参数小7个像素。
void SetHeight( int cyHeight );//该方法用于设置工具栏的高度。
加载一个位图资源
BOOL LoadToolBar( LPCTSTR lpszResourceName );
BOOL LoadToolBar( UINT nIDResource );
设置工具栏按钮位图
BOOL SetBitmap( HBITMAP hbmImageWell );
向工具栏中添加按钮
BOOL SetButtons( const UINT* lpIDArray, int nIDCount );
用于获取按钮信息
void GetButtonInfo( int nIndex, UINT& nID, UINT& nStyle, int& iImage ) const;

ID跟索引的转换
int CommandToIndex( UINT nIDFind );  、、
UINT GetItemID( int nIndex ) const;
根据按钮索引获取工具栏按钮的显示区域
virtual void GetItemRect( int nIndex, LPRECT lpRect );
按钮的风格
UINT GetButtonStyle( int nIndex ) const;
void SetButtonStyle( int nIndex, UINT nStyle );
参数说明
nIndex:标识按钮索引。
nStyle:标识按钮风格。可选值如下。
TBBS_BUTTON:标准按钮。
TBBS_SEPARATOR:分隔线。
TBBS_CHECKBOX:复选风格。
TBBS_GROUP:按钮组。
TBBS_CHECKGROUP:复选按钮组。
文本
void GetButtonText( int nIndex, CString& rString ) const; //设置
BOOL SetButtonText( int nIndex, LPCTSTR lpszText ); //读取

3例子

3.1 动态创建工具栏
void CDynamicTool1Dlg::OnButton1()

{
UINT array[11];
for(int i=0;i<10;i++)
{
if(i= =3 || i= =7)
array[i] = ID_SEPARATOR; //第4、第8个按钮为分隔条
else
array[i] = i+1001;
}
m_ToolBar.Create(this);
m_ToolBar.SetButtons(array,11);
m_ToolBar.LoadBitmap(IDB_BITMAP1); //加载位图
m_ToolBar.SetSizes(CSize(40,40),CSize(32,32)); //设置按钮和按钮位图大小
RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0); //显示工具栏
}
3.2动态创建有图片的工具栏
void CDynamicTool2Dlg::OnButton1()

{
//创建图像列表
m_ImageList.Create(32,32,ILC_COLOR24|ILC_MASK,1,1);
//向图像列表中添加图标
m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON1));
m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON2));
m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON3));
m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON4));
m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON5));
m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON6));
m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON7));
m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON8));
m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON9));
UINT array[11];
for(int i=0;i<10;i++)
{
if(i= =3 || i= =7)
array[i] = ID_SEPARATOR; //第4、第8个按钮为分隔条
else
array[i] = i+1001;
}
m_ToolBar.Create(this);
m_ToolBar.SetButtons(array,11);
//关联图像列表
m_ToolBar.GetToolBarCtrl().SetImageList(&m_ImageList);
m_ToolBar.SetSizes(CSize(40,40),CSize(32,32)); //设置按钮和图标的大小
RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0);

}
3.3加载工具栏资源
void CDynamicTool3Dlg::OnButton1()
{
//创建工具栏
m_ToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_SIZE_DYNAMIC | CBRS_BORDER_TOP );
m_ToolBar.LoadToolBar(IDR_TOOLBAR1); //加载工具栏资源
//设置图像和按钮的大小
m_ToolBar.GetToolBarCtrl().SetBitmapSize(CSize(16,16));
m_ToolBar.GetToolBarCtrl().SetButtonSize(CSize(22,22));
RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0);
}

 

原创粉丝点击