CMFCToolBar的注意事项

1. CMFCToolBar::LoadToolBarEx 配合CMFCToolBarInfo 可以指定工具条的大图标,需要设置CMFCToolBarInfo::m_uiLargeHotResID资源ID

	CMFCToolBarInfo tbInfo;
 	tbInfo.m_uiHotResID = IDR_TOOLBAR_STANDARD;			// Toolbar "hot" images
 	tbInfo.m_uiLargeHotResID = IDB_TOOLBAR_STANDARD_LARGER;		// Toolbar large "hot" images
 	if (!m_wndToolbarStandard.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
 		| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC, CRect(1,1,1,1), IDR_TOOLBAR_STANDARD) ||
 		!m_wndToolbarStandard.LoadToolBarEx(IDR_TOOLBAR_STANDARD, tbInfo))
 	{
 		TRACE0("Failed to create standard toolbar\n");
 		return false;      // fail to create
 	}
 	m_wndToolbarStandard.SetWindowText(_T("标准"));
 	m_wndToolbarStandard.EnableCustomizeButton(TRUE, ID_VIEW_CUSTOMIZE, _T("自定义..."));
 	m_wndToolbarStandard.EnableDocking(CBRS_ALIGN_ANY);
 	DockPane(&m_wndToolbarStandard);

2. CMFCToolBar::AddToolBarForImageCollection 为仅在菜单里显示的命令指定图标。

	// Load menu item image (not placed on any standard toolbars):
	CMFCToolBar::AddToolBarForImageCollection(IDR_TOOLBAR_OTHER, IDR_TOOLBAR_OTHER);

3. CMFCToolBar::EnableCustomizeButton 可以指定工具条自定义的响应消息处理,即启用工具栏最右侧的小箭头。

4. CFrameWndEx::EnablePaneMenu 启用在工具栏上的右键自定义工具条菜单,即在工具栏空白处的右键菜单。

// 启用工具栏和停靠窗口菜单替换
	EnablePaneMenu(TRUE, ID_VIEW_CUSTOMIZE, strCustomize, ID_VIEW_TOOLBAR);

5. CMDIFrameWndEx::DockPaneLeftOf 实现多工具条在一行的效果。


注意:

如果存在多个工具条,则在创建工具条时(CMFCToolBar::CreateEx)一定要指定ID,否则会导致以上第3第4条的功能紊乱,这个坑我踩了,跟代码查资料最后才解决。这里要感谢http://blog.sina.com.cn/s/blog_6167e9fc0100wso5.html的文章。

ON_COMMAND(ID_VIEW_CUSTOMIZE, &CMainFrame::OnViewCustomize)
ON_REGISTERED_MESSAGE(AFX_WM_CREATETOOLBAR, &CMainFrame::OnToolbarCreateNew)

这两个消息记着实现,否则工具条的右键菜单自定义是不能用的,这两个消息的实现,可参照VS创建的带CFMCToolbar的工程,创建初期已经实现。

### 回答1: 使用cmfctoolbar设置背景颜色需要先通过CFrameWnd::GetControlBar 函数获取到cmfctoolbar控件的指针,然后调用SetPaneStyle 函数设置控件的样式。可以通过如下代码实现: CMFCToolBar* pToolBar = NULL; CFrameWnd* pFrameWnd = AfxGetMainWnd(); if (pFrameWnd != NULL) { pToolBar = (CMFCToolBar*)pFrameWnd->GetControlBar(ID_TOOLBAR); } if (pToolBar != NULL) { pToolBar->SetPaneStyle(pToolBar->GetPaneStyle() | CBRS_SIZE_DYNAMIC | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_GRIPPER | CBRS_BORDER_BOTTOM); pToolBar->SetPaneFillColor(RGB(255, 255, 255)); //背景颜色设置为白色 } 此代码获取到主窗口中ID为ID_TOOLBAR的cmfctoolbar控件,然后设置它的样式和背景颜色。SetPaneFillColor 函数用于设置控件的背景颜色,传入的参数为RGB值。可以自由替换RGB值来设置自己喜欢的颜色。 ### 回答2: 在使用CMFCToolBar控件时,我们可以通过以下步骤来设置它的背景颜色: 1. 在工程中添加头文件afxcontrolbars.h。 2. 在创建CMFCToolBar对象之前,设置其颜色属性。例如: CMFCToolBar m_wndToolBar; m_wndToolBar.SetBackgroundColor(RGB(0, 255, 0)); 其中,RGB(0, 255, 0)表示绿色的RGB值。 3. 如果需要在运行时改变背景颜色,我们可以在程序中捕捉WM_PALETTECHANGED消息,并调用CMFCToolBar的Invalidate()方法来更新界面,例如: void CMainFrame::OnPaletteChanged(CWnd* pFocusWnd) { CMDIFrameWnd::OnPaletteChanged(pFocusWnd); if (m_wndToolBar.GetSafeHwnd() != NULL) { // 重新绘制工具栏 m_wndToolBar.Invalidate(); } } 通过以上步骤,我们可以轻松地为CMFCToolBar设置背景颜色,让界面变得更加美观。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值