15,979
社区成员
发帖
与我相关
我的任务
分享
CToolBar m_wndToolBar;
CImageList m_imageList;
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CFrameWndEx::OnCreate(lpCreateStruct) == -1)
return -1;
BOOL bNameValid;
// 基于持久值设置视觉管理器和样式
OnApplicationLook(theApp.m_nAppLook);
if (!m_wndMenuBar.Create(this))
{
TRACE0("未能创建菜单栏\n");
return -1; // 未能创建
}
m_wndMenuBar.SetPaneStyle(m_wndMenuBar.GetPaneStyle() | CBRS_SIZE_DYNAMIC | CBRS_TOOLTIPS | CBRS_FLYBY);
// 防止菜单栏在激活时获得焦点
CMFCPopupMenu::SetForceMenuFocus(FALSE);
//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(theApp.m_bHiColorIcons ? IDR_MAINFRAME_256 : IDR_MAINFRAME))
//{
// TRACE0("未能创建工具栏\n");
// return -1; // 未能创建
//}
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_TOOLBAR1))
{
TRACE0("未能创建工具栏\n");
return -1; // 未能创建
}
m_imageList.Create(32,32,ILC_COLOR32|ILC_MASK,1,0);
CBitmap bmp;
bmp.LoadBitmapA(IDI_Start_bmp);
m_imageList.Add(&bmp,RGB(255,255,255));
bmp.DeleteObject();
m_wndToolBar.SetSizes(CSize(40,40),CSize(32,32));
m_wndToolBar.GetToolBarCtrl().SetImageList(&m_imageList);
RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0);
//CString strToolBarName;
//bNameValid = strToolBarName.LoadString(IDS_TOOLBAR_STANDARD);
//ASSERT(bNameValid);
//m_wndToolBar.SetWindowText(strToolBarName);
CString strCustomize;
bNameValid = strCustomize.LoadString(IDS_TOOLBAR_CUSTOMIZE);
ASSERT(bNameValid);
// m_wndToolBar.EnableCustomizeButton(TRUE, ID_VIEW_CUSTOMIZE, strCustomize);
// 允许用户定义的工具栏操作:
InitUserToolbars(NULL, uiFirstUserToolBarId, uiLastUserToolBarId);
if (!m_wndStatusBar.Create(this))
{
TRACE0("未能创建状态栏\n");
return -1; // 未能创建
}
m_wndStatusBar.SetIndicators(indicators, sizeof(indicators)/sizeof(UINT));
// TODO: 如果您不希望工具栏和菜单栏可停靠,请删除这五行
m_wndMenuBar.EnableDocking(CBRS_ALIGN_ANY);
m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
EnableDocking(CBRS_ALIGN_ANY);
DockPane(&m_wndMenuBar);
// DockPane(&m_wndToolBar);
// DockControlBar(&m_wndToolBar);
// m_wndToolBar.ShowPane(FALSE,FALSE,TRUE);
// 启用 Visual Studio 2005 样式停靠窗口行为
CDockingManager::SetDockingMode(DT_SMART);
// 启用 Visual Studio 2005 样式停靠窗口自动隐藏行为
EnableAutoHidePanes(CBRS_ALIGN_ANY);
// 启用工具栏和停靠窗口菜单替换
EnablePaneMenu(TRUE, ID_VIEW_CUSTOMIZE, strCustomize, ID_VIEW_TOOLBAR);
// 启用快速(按住 Alt 拖动)工具栏自定义
CMFCToolBar::EnableQuickCustomization();
if (CMFCToolBar::GetUserImages() == NULL)
{
// 加载用户定义的工具栏图像
if (m_UserImages.Load(_T(".\\UserImages.bmp")))
{
CMFCToolBar::SetUserImages(&m_UserImages);
}
}
// 启用菜单个性化(最近使用的命令)
// TODO: 定义您自己的基本命令,确保每个下拉菜单至少有一个基本命令。
CList<UINT, UINT> lstBasicCommands;
lstBasicCommands.AddTail(ID_FILE_NEW);
lstBasicCommands.AddTail(ID_FILE_OPEN);
lstBasicCommands.AddTail(ID_FILE_SAVE);
lstBasicCommands.AddTail(ID_FILE_PRINT);
lstBasicCommands.AddTail(ID_APP_EXIT);
lstBasicCommands.AddTail(ID_EDIT_CUT);
lstBasicCommands.AddTail(ID_EDIT_PASTE);
lstBasicCommands.AddTail(ID_EDIT_UNDO);
lstBasicCommands.AddTail(ID_APP_ABOUT);
lstBasicCommands.AddTail(ID_VIEW_STATUS_BAR);
lstBasicCommands.AddTail(ID_VIEW_TOOLBAR);
lstBasicCommands.AddTail(ID_VIEW_APPLOOK_OFF_2003);
lstBasicCommands.AddTail(ID_VIEW_APPLOOK_VS_2005);
lstBasicCommands.AddTail(ID_VIEW_APPLOOK_OFF_2007_BLUE);
lstBasicCommands.AddTail(ID_VIEW_APPLOOK_OFF_2007_SILVER);
lstBasicCommands.AddTail(ID_VIEW_APPLOOK_OFF_2007_BLACK);
lstBasicCommands.AddTail(ID_VIEW_APPLOOK_OFF_2007_AQUA);
lstBasicCommands.AddTail(ID_VIEW_APPLOOK_WINDOWS_7);
CMFCToolBar::SetBasicCommands(lstBasicCommands);
return 0;
}
#if !defined(AFX_TOOLBAREX_H__7F634227_9811_4C48_A18D_5D6C640DC6CB__INCLUDED_)
#define AFX_TOOLBAREX_H__7F634227_9811_4C48_A18D_5D6C640DC6CB__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
// ToolBarEx.h : header file
//
/////////////////////////////////////////////////////////////////////////////
//CToolBarEx: 真彩色工具栏
/////////////////////////////////////////////////////////////////////////////
// CToolBarEx window
class CToolBarEx : public CToolBar
{
// Construction
public:
CToolBarEx();
virtual ~CToolBarEx();
// Attributes
public:
// Operations
public:
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CToolBarEx)
//}}AFX_VIRTUAL
// Implementation
public:
BOOL CreateHotToolBar(CWnd* pParentWnd,LPCTSTR lpszResName,LPCTSTR lpszHotResName);
void SetBlackMask(COLORREF crMask);
BOOL LoadToolBar(LPCTSTR lpszResourceName);
BOOL LoadToolBar(UINT nIDResource);
void SetButtonText(const CStringArray& strArr);
void LoadBitmap(UINT *pnIDBmp,UINT nCount,CSize sizeBmp);
BOOL LoadBitmap(LPCTSTR lpszResourceName,BOOL bHot);
// Generated message map functions
protected:
BOOL LoadBitmap(LPCTSTR lpszResourceName);
//{{AFX_MSG(CToolBarEx)
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
//
CSize m_nSizeImage;
CImageList m_cImageList;
COLORREF m_crMask; //背景色
};
/////////////////////////////////////////////////////////////////////////////
//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
#endif // !defined(AFX_TOOLBAREX_H__7F634227_9811_4C48_A18D_5D6C640DC6CB__INCLUDED_)
cpp:
// ToolBarEx.cpp : implementation file
//
#include "stdafx.h"
#include "ToolBarEx.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CToolBarEx
CToolBarEx::CToolBarEx()
{
m_crMask = RGB(255,0,255);
}
CToolBarEx::~CToolBarEx()
{
}
BEGIN_MESSAGE_MAP(CToolBarEx, CToolBar)
//{{AFX_MSG_MAP(CToolBarEx)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CToolBarEx message handlers
void CToolBarEx::LoadBitmap(UINT *pnIDBmp, UINT nCount,CSize sizeBmp)
{
CImageList imgBmp;
//设定位图
imgBmp.Create(sizeBmp.cx ,sizeBmp.cy,ILC_COLORDDB,4,4);
for(UINT n=0;n<nCount;n++)
{
CBitmap Bitmap;
Bitmap.LoadBitmap (pnIDBmp[n]);
imgBmp.Add (&Bitmap,RGB(0,0,0));
}
GetToolBarCtrl( ).SetImageList ( &imgBmp ) ;
imgBmp.Detach( ) ;
}
void CToolBarEx::SetButtonText(const CStringArray& strArr)
{
int nCount = GetToolBarCtrl( ).GetButtonCount();
ASSERT(nCount>strArr.GetUpperBound());
int nItem = 0;
for(int n = 0; n < nCount; n++)
{
ASSERT(nItem <= strArr.GetUpperBound());
UINT unStyle = GetButtonStyle(n);
if(unStyle != TBBS_SEPARATOR)
CToolBar::SetButtonText (n, strArr.GetAt (nItem++) ) ;
}
//
CRect rt ;
GetItemRect ( 0, &rt ) ;
CSize sizeItem = rt.Size ();
// sizeItem.cy +=3;
SetSizes ( sizeItem, m_nSizeImage ) ;
}
BOOL CToolBarEx::LoadToolBar(UINT nIDResource)
{
BOOL bResult = CToolBar::LoadToolBar(nIDResource);
if(!bResult)
return bResult;
return LoadToolBar(MAKEINTRESOURCE(nIDResource));
return bResult;
}
BOOL CToolBarEx::LoadToolBar(LPCTSTR lpszResourceName)
{
ASSERT_VALID(this);
ASSERT(lpszResourceName != NULL);
BOOL bResult = CToolBar::LoadToolBar (lpszResourceName);
if(!bResult)
return bResult;
CRect Rect;
// CToolBar::GetToolBarCtrl().GetItemRect(0,&Rect);
// DWORD dsBtnSize=GetToolBarCtrl().GetButtonSize();
// int nWidth=LOWORD(dsBtnSize); //按钮外型尺寸
// int nHeight=HIWORD(dsBtnSize);
int nImageCount = CToolBar::GetToolBarCtrl().GetImageList ()->GetImageCount ();
VERIFY(nImageCount > 0);
//位图大小
IMAGEINFO ImageInfo;
CToolBar::GetToolBarCtrl().GetImageList ()->GetImageInfo (0,&ImageInfo);
int nWidth = ImageInfo.rcImage .right - ImageInfo.rcImage.left ;
int nHeight = ImageInfo.rcImage .bottom - ImageInfo.rcImage.top ;
m_nSizeImage.cx = nWidth;
m_nSizeImage.cy = nHeight;
//*
// 加载工具栏位图 - 必须使用::LoadImage映射颜色
// 将(192,192,192) 映射到 COLOR_3DFACE.
//
HBITMAP hbm = (HBITMAP)::LoadImage(AfxGetInstanceHandle(),
lpszResourceName,
IMAGE_BITMAP,
0,0, // cx,cy
LR_CREATEDIBSECTION | LR_LOADMAP3DCOLORS );
CBitmap Bitmap;
Bitmap.Attach(hbm);
// Create image list and set in toolbar.
// Must use ILC_COLOR24 for 256-color images!
// 创建图像清单并设置工具栏
// 256色图像必须使用ILC_COLOR8!
//方法:
CImageList cImage;//
//1
cImage.Create(nWidth,nHeight, TRUE|ILC_COLOR24, 4, 4); //TRUE|ILC_COLOR24 ILC_COLOR8//TRUE-----透明模式
cImage.Add(&Bitmap,m_crMask);
//2
GetToolBarCtrl().SetImageList(&cImage);
//3
Bitmap.Detach ();
cImage.Detach ();
//*/
return bResult;
}
BOOL CToolBarEx::LoadBitmap(LPCTSTR lpszResourceName)
{
//*
CBitmap Bitmap;
BOOL bResult = Bitmap.LoadBitmap (lpszResourceName);
if(bResult)
SetBitmap (Bitmap.operator HBITMAP());
Bitmap.Detach();
//*/
/*
// 加载工具栏位图 - 必须使用::LoadImage映射颜色
// 将(192,192,192) 映射到 COLOR_3DFACE.
//
HBITMAP hbm = (HBITMAP)::LoadImage(AfxGetInstanceHandle(),
// MAKEINTRESOURCE(nIDResource),
lpszResourceName,
IMAGE_BITMAP,
0,0, // cx,cy
LR_CREATEDIBSECTION | LR_LOADMAP3DCOLORS );//Gray, RGB(192,192,192) COLOR_3DFACE
CBitmap Bitmap;
Bitmap.Attach(hbm);
SetBitmap (Bitmap.operator HBITMAP());
Bitmap.Detach();
BOOL bResult=TRUE;
// 创建图像清单并设置工具栏
// 256色图像必须使用ILC_COLOR8!
//
// m_cImageList.Create(20,20, ILC_COLOR8, 4, 4);
// m_cImageList.Create(20,20, ILC_COLOR24, 4, 4);
// bResult=m_cImageList.Add(&bm,(CBitmap*)NULL);
// GetToolBarCtrl().SetImageList(&m_cImageList);
//*/
return bResult;
}
void CToolBarEx::SetBlackMask(COLORREF crMask)
{
m_crMask = crMask;
}
BOOL CToolBarEx::CreateHotToolBar(CWnd* pParentWnd,LPCTSTR lpszResName,LPCTSTR lpszHotResName)
{
BOOL bResult = FALSE;
CToolBar cToolBar;
cToolBar.CreateEx (pParentWnd);
cToolBar.LoadToolBar (lpszResName);
//位图大小
IMAGEINFO ImageInfo;
cToolBar.GetToolBarCtrl().GetImageList ()->GetImageInfo (0,&ImageInfo);
int nWidth = ImageInfo.rcImage .right - ImageInfo.rcImage.left ;
int nHeight = ImageInfo.rcImage .bottom - ImageInfo.rcImage.top ;
m_nSizeImage.cx = nWidth;
m_nSizeImage.cy = nHeight;
//
CreateEx (pParentWnd);
LoadBitmap(lpszResName,FALSE);
LoadBitmap(lpszHotResName,TRUE);
//
ModifyStyle ( 0, TBSTYLE_FLAT | TBSTYLE_TRANSPARENT ) ;
int nCount = cToolBar.GetCount ();
SetButtons ( NULL,nCount ) ;
for(int i = 0; i < nCount; i++)
{
UINT nID;
UINT nStyle;
int iImage;
cToolBar.GetButtonInfo(i,nID,nStyle,iImage);
SetButtonInfo ( i, nID, nStyle, iImage ) ;
}
//设定按钮尺寸
CRect rt ;
GetItemRect ( 0, &rt ) ;
SetSizes( rt.Size( ), m_nSizeImage ) ;
return bResult;
}
BOOL CToolBarEx::LoadBitmap(LPCTSTR lpszResourceName,BOOL bHot)
{
BOOL bResult = TRUE;
//
// 加载工具栏位图 - 必须使用::LoadImage映射颜色
// 将(192,192,192) 映射到 COLOR_3DFACE.
//
HBITMAP hbm = (HBITMAP)::LoadImage(AfxGetInstanceHandle(),
lpszResourceName,
IMAGE_BITMAP,
0,0, // cx,cy
LR_CREATEDIBSECTION | LR_LOADMAP3DCOLORS );
CBitmap Bitmap;
Bitmap.Attach(hbm);
// Create image list and set in toolbar.
// Must use ILC_COLOR24 for 256-color images!
// 创建图像清单并设置工具栏
// 256色图像必须使用ILC_COLOR8!
//方法:
CImageList cImage;//
//1
cImage.Create(m_nSizeImage.cx ,m_nSizeImage.cy , TRUE|ILC_COLOR24, 4, 4); //TRUE|ILC_COLOR24 ILC_COLOR8//TRUE-----透明模式
cImage.Add(&Bitmap,m_crMask);
//2
if(!bHot)
GetToolBarCtrl().SetImageList(&cImage);
else
GetToolBarCtrl().SetHotImageList(&cImage);
//3
Bitmap.Detach ();
cImage.Detach ();
//*/
return bResult;
}
void CVisionView::OnInitialUpdate()
{
CFormView::OnInitialUpdate();
GetParentFrame()->RecalcLayout();
ResizeParentToFit();
m_TBar.CreateEx(this,TBSTYLE_FLAT ,WS_CHILD | WS_VISIBLE | CBRS_TOP
| CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC);
m_TBar.LoadToolBar(IDR_TOOLBAR1);//要自己先在工具栏编辑器中创建一个工具栏
CBitmap bmp;
CString str;
int i;
m_Imglist.Create(32,32,ILC_COLOR32 | ILC_MASK,1,1);//可以是32位图片
bmp.DeleteObject();
for(int i=0;i<6;i++)
{
//使用现有位图为bmp赋值
bmp.LoadBitmap(IDI_Start_bmp+i);
m_Imglist.Add(&bmp,RGB(255,255,255));
bmp.DeleteObject();
}
UINT nArray[6];
for(i=0;i<6;i++)
{
nArray[i]=ID_BUTTON1+i;
}
m_toolbar.SetButtons(nArray,6);
m_TBar.SetSizes(CSize(40,40),CSize(32,32));
m_TBar.EnableToolTips(true);
m_TBar.GetToolBarCtrl().SetImageList(&m_Imglist);
RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0);
}
CToolBar m_ScreenToolbar;//工具栏
CImageList m_ImageToolList;//工具栏图像列表
/***********************************************************
** 功能描述: 初始化工具栏
************************************************************/
void CComConcentratorDlg::initTool()
{
m_ScreenToolbar.Create(this);
m_ScreenToolbar.LoadToolBar(IDR_TOOLBAR_MAIN);
m_ScreenToolbar.SetButtonText(0, _T("串口设置"));
m_ImageToolList.Create(32, 32, ILC_COLOR32, 1, 1);
m_ImageToolList.Add(AfxGetApp()->LoadIcon(IDI_ICON_COMSET));
m_ScreenToolbar.SendMessage(TB_SETIMAGELIST, 0, (LPARAM)m_ImageToolList.m_hImageList);
RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST, 0);
}
上面是我的代码..你试一下吧楼主