请问如何为工具条加上背景? 现在用代码动态创建了一个工具条,里面包含各种控件,如Progress,Edit等,现在我想给这个工具条加上一个背景,请问应该如何实现? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 />>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>// \ Avitoolbar.h (C) 2002.1.10 // \ 增强型工具栏类:// \ 1、添加按钮文字// \ 2、添加工具栏位图纹理// \ 3、重画工具栏把手// \ 4、添加视频播放// // //>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>#ifndef _AVITOOLBAR_H__#define _AVITOOLBAR_H__/////////////////////////////////////////////////////////////////////////////// CAviToolbar windowclass CAviToolbar : public CToolBar{public: CAviToolbar();public: CReBar m_wndReBar; //定义ReBar CAnimateCtrl avi; //定义多媒体动画 COLORREF m_clrShadow; //定义颜色 COLORREF m_clrNormal; //定义颜色 COLORREF m_clrHilite; //定义颜色public: BOOL LoadBMPImage( LPCTSTR sBMPFile, CBitmap& bitmap, CPalette *pPal ); void LoadBackImage (); void SetBackImage ();// Overrides // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CAviToolbar) //}}AFX_VIRTUAL// Implementationpublic: CString m_bmpName; BOOL m_bBackgroundImage; void SetTooltext(); virtual ~CAviToolbar(); void DrawGripper(CDC & dc) const; // Generated message map functionsprotected: CBitmap m_bmpBack;protected: //{{AFX_MSG(CAviToolbar) afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct); afx_msg void OnSize(UINT nType, int cx, int cy); afx_msg void OnNcPaint(); afx_msg void OnSetskin(); afx_msg void OnSysColorChange(); //}}AFX_MSG DECLARE_MESSAGE_MAP()};/////////////////////////////////////////////////////////////////////////////#endif // AviToolbar.cpp : implementation file//#include "stdafx.h"#include "DTASvm.h"#include "AviToolbar.h"#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[] = __FILE__;#endif /////////////////////////////////////////////////////////////////////////////// CAviToolbarCAviToolbar::CAviToolbar(){ m_clrHilite = ::GetSysColor(COLOR_BTNHIGHLIGHT);//RGB(222,230,255); m_clrNormal = RGB(212,208,200);//::GetSysColor(COLOR_BTNFACE); m_clrShadow = ::GetSysColor(COLOR_MENUTEXT);//RGB(64,0,128);// m_bBackgroundImage=TRUE; m_bmpName="";}CAviToolbar::~CAviToolbar(){}BEGIN_MESSAGE_MAP(CAviToolbar, CToolBar) //{{AFX_MSG_MAP(CAviToolbar) ON_WM_CREATE() ON_WM_SIZE() ON_WM_NCPAINT() ON_COMMAND(IDM_SETSKIN, OnSetskin) ON_WM_SYSCOLORCHANGE() //}}AFX_MSG_MAPEND_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////// CAviToolbar message handlersint CAviToolbar::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CToolBar::OnCreate(lpCreateStruct) == -1) return -1; //创建AVI并自动播放 avi.Create(ACS_AUTOPLAY |WS_CHILD | WS_VISIBLE,CRect(0,0,0,0),this,ID_MYAVI); avi.Open(IDR_AVI1); //打开AVI avi.Play(0,-1,-1); //从第一帧开始循环播放 return 0;}//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>// 重置工具栏大小 移动视频位置,使之紧靠工具栏右侧.void CAviToolbar::OnSize(UINT nType, int cx, int cy) { CToolBar::OnSize(nType, cx, cy); //SetHeight(22); //设置工具栏高度 CRect toolbarclient; GetClientRect(&toolbarclient); //得到工具栏坐标 toolbarclient.left = toolbarclient.right-40; //toolbarclient.OffsetRect(1,0); //调整矩形位置 avi.MoveWindow(toolbarclient.left,3,toolbarclient.right,45); //移动AVI}//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>// 重画工具栏void CAviToolbar::OnNcPaint() { CControlBar::EraseNonClient(); CWindowDC dc(this); CRect pRect; CRect pOver; GetClientRect( &pRect ); pOver = pRect; pOver.right = pOver.left + 3; pOver.OffsetRect(2,0); CBrush brFill(m_clrNormal); dc.FillRect(pOver,&brFill); InvalidateRect( &pRect, TRUE ); DrawGripper(dc); // Do not call CToolBar::OnNcPaint() for painting messages}//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>// 给工具栏添加工具栏把手void CAviToolbar::DrawGripper(CDC & dc) const{ CRect rcGripper; GetWindowRect(rcGripper); ScreenToClient(rcGripper); rcGripper.OffsetRect(-rcGripper.left, -rcGripper.top); // Gripper at left rcGripper.DeflateRect(3, 3); //rcGripper.left -= 0; rcGripper.top += 1; rcGripper.right = rcGripper.left; rcGripper.bottom -= 44; for(int i=1;i<=23;i++) { dc.Draw3dRect(rcGripper, m_clrHilite, m_clrShadow ); rcGripper.OffsetRect(3, 0); dc.Draw3dRect(rcGripper, m_clrHilite, m_clrShadow); rcGripper.OffsetRect(-3, 2); }}void CAviToolbar::SetTooltext(){//+++++++++++++++++++++++++++设置工具栏文字++++++++++++++++++++++++++++++++++++++++++ for(int i = 0; i < CToolBar::GetCount(); i++) { UINT id = CToolBar::GetItemID(i); CString s; if(!s.LoadString(id)) continue; int j = s.Find(_T('\n')); if(j < 0) continue; s = s.Right(s.GetLength() - j - 1); CToolBar::SetButtonText(i,s); //CJToolBar::SetButtonDropDown(IDR_POPUP); } // Adjust sizes to include text CRect rect; CToolBar::GetItemRect(0,&rect); CToolBar::SetSizes(rect.Size(),CSize(32,31));//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++}BOOL CAviToolbar::LoadBMPImage( LPCTSTR sBMPFile, CBitmap& bitmap, CPalette *pPal ){ CFile file; if( !file.Open( sBMPFile, CFile::modeRead) ) return FALSE; BITMAPFILEHEADER bmfHeader; // Read file header if (file.Read((LPSTR)&bmfHeader, sizeof(bmfHeader)) != sizeof(bmfHeader)) return FALSE; // File type should be 'BM' if (bmfHeader.bfType != ((WORD) ('M' << 8) | 'B')) return FALSE; // Get length of the remainder of the file and allocate memory DWORD nPackedDIBLen = file.GetLength() - sizeof(BITMAPFILEHEADER); HGLOBAL hDIB = ::GlobalAlloc(GMEM_FIXED, nPackedDIBLen); if (hDIB == 0) return FALSE; // Read the remainder of the bitmap file. if (file.ReadHuge((LPSTR)hDIB, nPackedDIBLen) != nPackedDIBLen ) { ::GlobalFree(hDIB); return FALSE; } BITMAPINFOHEADER &bmiHeader = *(LPBITMAPINFOHEADER)hDIB ; BITMAPINFO &bmInfo = *(LPBITMAPINFO)hDIB ; // If bmiHeader.biClrUsed is zero we have to infer the number // of colors from the number of bits used to specify it. int nColors = bmiHeader.biClrUsed ? bmiHeader.biClrUsed : 1 << bmiHeader.biBitCount; LPVOID lpDIBBits; if( bmInfo.bmiHeader.biBitCount > 8 ) lpDIBBits = (LPVOID)((LPDWORD)(bmInfo.bmiColors + bmInfo.bmiHeader.biClrUsed) + ((bmInfo.bmiHeader.biCompression == BI_BITFIELDS) ? 3 : 0)); else lpDIBBits = (LPVOID)(bmInfo.bmiColors + nColors); // Create the logical palette if( pPal != NULL ) { // Create the palette if( nColors <= 256 ) { UINT nSize = sizeof(LOGPALETTE) + (sizeof(PALETTEENTRY) * nColors); LOGPALETTE *pLP = (LOGPALETTE *) new BYTE[nSize]; pLP->palVersion = 0x300; pLP->palNumEntries = nColors; for( int i=0; i < nColors; i++) { pLP->palPalEntry[i].peRed = bmInfo.bmiColors[i].rgbRed; pLP->palPalEntry[i].peGreen = bmInfo.bmiColors[i].rgbGreen; pLP->palPalEntry[i].peBlue = bmInfo.bmiColors[i].rgbBlue; pLP->palPalEntry[i].peFlags = 0; } pPal->CreatePalette( pLP ); delete[] pLP; } } CClientDC dc(NULL); CPalette* pOldPalette = NULL; if( pPal ) { pOldPalette = dc.SelectPalette( pPal, FALSE ); dc.RealizePalette(); } HBITMAP hBmp = CreateDIBitmap( dc.m_hDC, // handle to device context &bmiHeader, // pointer to bitmap size and format data CBM_INIT, // initialization flag lpDIBBits, // pointer to initialization data &bmInfo, // pointer to bitmap color-format data DIB_RGB_COLORS); // color-data usage bitmap.Detach(); bitmap.Attach( hBmp ); if( pOldPalette ) dc.SelectPalette( pOldPalette, FALSE ); ::GlobalFree(hDIB); return TRUE;}void CAviToolbar::SetBackImage (){ CReBarCtrl& rc = m_wndReBar.GetReBarCtrl (); for (UINT i = 0; i < rc.GetBandCount(); i++) { REBARBANDINFO info; memset (&info, 0, sizeof (REBARBANDINFO)); info.cbSize = sizeof (info); info.fMask = RBBIM_BACKGROUND; info.hbmBack = m_bBackgroundImage ? (HBITMAP)m_bmpBack : NULL; rc.SetBandInfo (i, &info); CRect rectBand; rc.GetRect (i, rectBand); rc.InvalidateRect (rectBand); rc.UpdateWindow (); info.fMask = RBBIM_CHILD; rc.GetBandInfo (i, &info); if (info.hwndChild != NULL) { ::InvalidateRect (info.hwndChild, NULL, TRUE); ::UpdateWindow (info.hwndChild); } }}void CAviToolbar::LoadBackImage (){ if(m_bmpName.GetLength()>0) LoadBMPImage(m_bmpName,m_bmpBack,NULL); else LoadBMPImage("res\\back.bmp",m_bmpBack,NULL);}void CAviToolbar::OnSetskin() { // TODO: Add your command handler code here}void CAviToolbar::OnSysColorChange() { CToolBar::OnSysColorChange(); LoadBackImage (); SetBackImage (); }漫漫看把! To: lhua_1225(lh) 首先很感谢你的帮忙。有一些问题想向你请教:我现在动态创建了一个工具条。现在想加上背景。我大致看了一下你提供的原码。就我理解,用到的相关函数为:LoadBMPImage、SetBackImage、LoadBackImage。我现在创建了一个工具条类CMyBar,派生自CToolbar,并加上上述三个函数和相关的属性,然后生成一个对象m_wndPropBar并用Create函数创建。然后依次调用LoadBackImage()和SetBackImage(),但并没有实现加上背景。我跟踪了一下,发现在执行CReBarCtrl& rc = m_wndReBar.GetReBarCtrl()后用rc.GetBandCount()得到的返回值是0,我对CReBar没有任何概念,你能给解释一下吗?我的工具条有好几个部分组成:有Button、Progress、Static等,但没有SEPARATORGetBandCount()得到的是什么,在MSDN中说是The number of bands assigned to the control. 这是什么意思。我的工具条现在可以正常显示。 ftp服务器。 内码问题,大家都是怎么处理的? 为什么我的工程调试时的“apply code changes”一直都是灰色的,不能用啊? 两个静态文本设置成不同颜色的问题 请教ftp客户端数据上传问题:在通过新建立的数据连接把文件数据发送到接收方后,是否需要完成标志呢 这种基础c++用法是否会产生问题 我E文不好,请问isapi是做什么的? 为什么在VB下能用的控件,在VC下却不能用呢。 关于IP Helper组函数的问题 应该怎样实习,(高分求教) 可以用ATL写个对话框吗?如果可以,请给相关资料看看 关天CListCtrl的一个问题?
// \ Avitoolbar.h (C) 2002.1.10
// \ 增强型工具栏类:
// \ 1、添加按钮文字
// \ 2、添加工具栏位图纹理
// \ 3、重画工具栏把手
// \ 4、添加视频播放
//
//
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
#ifndef _AVITOOLBAR_H__
#define _AVITOOLBAR_H__/////////////////////////////////////////////////////////////////////////////
// CAviToolbar windowclass CAviToolbar : public CToolBar
{
public:
CAviToolbar();public:
CReBar m_wndReBar; //定义ReBar
CAnimateCtrl avi; //定义多媒体动画
COLORREF m_clrShadow; //定义颜色
COLORREF m_clrNormal; //定义颜色
COLORREF m_clrHilite; //定义颜色
public:
BOOL LoadBMPImage( LPCTSTR sBMPFile, CBitmap& bitmap, CPalette *pPal );
void LoadBackImage ();
void SetBackImage ();// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CAviToolbar)
//}}AFX_VIRTUAL// Implementation
public:
CString m_bmpName;
BOOL m_bBackgroundImage;
void SetTooltext();
virtual ~CAviToolbar();
void DrawGripper(CDC & dc) const; // Generated message map functions
protected:
CBitmap m_bmpBack;
protected:
//{{AFX_MSG(CAviToolbar)
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
afx_msg void OnSize(UINT nType, int cx, int cy);
afx_msg void OnNcPaint();
afx_msg void OnSetskin();
afx_msg void OnSysColorChange();
//}}AFX_MSG DECLARE_MESSAGE_MAP()
};/////////////////////////////////////////////////////////////////////////////#endif // AviToolbar.cpp : implementation file
//#include "stdafx.h"
#include "DTASvm.h"
#include "AviToolbar.h"#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
// CAviToolbarCAviToolbar::CAviToolbar()
{
m_clrHilite = ::GetSysColor(COLOR_BTNHIGHLIGHT);//RGB(222,230,255);
m_clrNormal = RGB(212,208,200);//::GetSysColor(COLOR_BTNFACE);
m_clrShadow = ::GetSysColor(COLOR_MENUTEXT);//RGB(64,0,128);//
m_bBackgroundImage=TRUE;
m_bmpName="";
}CAviToolbar::~CAviToolbar()
{
}
BEGIN_MESSAGE_MAP(CAviToolbar, CToolBar)
//{{AFX_MSG_MAP(CAviToolbar)
ON_WM_CREATE()
ON_WM_SIZE()
ON_WM_NCPAINT()
ON_COMMAND(IDM_SETSKIN, OnSetskin)
ON_WM_SYSCOLORCHANGE()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////
// CAviToolbar message handlersint CAviToolbar::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CToolBar::OnCreate(lpCreateStruct) == -1)
return -1; //创建AVI并自动播放
avi.Create(ACS_AUTOPLAY |WS_CHILD | WS_VISIBLE,CRect(0,0,0,0),this,ID_MYAVI);
avi.Open(IDR_AVI1); //打开AVI
avi.Play(0,-1,-1); //从第一帧开始循环播放
return 0;
}
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
// 重置工具栏大小 移动视频位置,使之紧靠工具栏右侧.void CAviToolbar::OnSize(UINT nType, int cx, int cy)
{
CToolBar::OnSize(nType, cx, cy);
//SetHeight(22); //设置工具栏高度
CRect toolbarclient;
GetClientRect(&toolbarclient); //得到工具栏坐标
toolbarclient.left = toolbarclient.right-40;
//toolbarclient.OffsetRect(1,0); //调整矩形位置
avi.MoveWindow(toolbarclient.left,3,toolbarclient.right,45); //移动AVI
}
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
// 重画工具栏
void CAviToolbar::OnNcPaint()
{
CControlBar::EraseNonClient();
CWindowDC dc(this);
CRect pRect;
CRect pOver;
GetClientRect( &pRect );
pOver = pRect;
pOver.right = pOver.left + 3;
pOver.OffsetRect(2,0); CBrush brFill(m_clrNormal);
dc.FillRect(pOver,&brFill);
InvalidateRect( &pRect, TRUE );
DrawGripper(dc);
// Do not call CToolBar::OnNcPaint() for painting messages
}//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
// 给工具栏添加工具栏把手
void CAviToolbar::DrawGripper(CDC & dc) const
{
CRect rcGripper;
GetWindowRect(rcGripper);
ScreenToClient(rcGripper);
rcGripper.OffsetRect(-rcGripper.left, -rcGripper.top);
// Gripper at left
rcGripper.DeflateRect(3, 3);
//rcGripper.left -= 0;
rcGripper.top += 1;
rcGripper.right = rcGripper.left;
rcGripper.bottom -= 44; for(int i=1;i<=23;i++)
{
dc.Draw3dRect(rcGripper, m_clrHilite, m_clrShadow );
rcGripper.OffsetRect(3, 0);
dc.Draw3dRect(rcGripper, m_clrHilite, m_clrShadow);
rcGripper.OffsetRect(-3, 2);
}
}void CAviToolbar::SetTooltext()
{
//+++++++++++++++++++++++++++设置工具栏文字++++++++++++++++++++++++++++++++++++++++++
for(int i = 0; i < CToolBar::GetCount(); i++)
{
UINT id = CToolBar::GetItemID(i);
CString s;
if(!s.LoadString(id)) continue;
int j = s.Find(_T('\n'));
if(j < 0) continue;
s = s.Right(s.GetLength() - j - 1);
CToolBar::SetButtonText(i,s);
//CJToolBar::SetButtonDropDown(IDR_POPUP);
}
// Adjust sizes to include text
CRect rect;
CToolBar::GetItemRect(0,&rect);
CToolBar::SetSizes(rect.Size(),CSize(32,31));
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
}BOOL CAviToolbar::LoadBMPImage( LPCTSTR sBMPFile, CBitmap& bitmap, CPalette *pPal )
{
CFile file;
if( !file.Open( sBMPFile, CFile::modeRead) )
return FALSE; BITMAPFILEHEADER bmfHeader; // Read file header
if (file.Read((LPSTR)&bmfHeader, sizeof(bmfHeader)) != sizeof(bmfHeader))
return FALSE; // File type should be 'BM'
if (bmfHeader.bfType != ((WORD) ('M' << 8) | 'B'))
return FALSE; // Get length of the remainder of the file and allocate memory
DWORD nPackedDIBLen = file.GetLength() - sizeof(BITMAPFILEHEADER);
HGLOBAL hDIB = ::GlobalAlloc(GMEM_FIXED, nPackedDIBLen);
if (hDIB == 0)
return FALSE; // Read the remainder of the bitmap file.
if (file.ReadHuge((LPSTR)hDIB, nPackedDIBLen) != nPackedDIBLen )
{
::GlobalFree(hDIB);
return FALSE;
}
BITMAPINFOHEADER &bmiHeader = *(LPBITMAPINFOHEADER)hDIB ;
BITMAPINFO &bmInfo = *(LPBITMAPINFO)hDIB ; // If bmiHeader.biClrUsed is zero we have to infer the number
// of colors from the number of bits used to specify it.
int nColors = bmiHeader.biClrUsed ? bmiHeader.biClrUsed :
1 << bmiHeader.biBitCount; LPVOID lpDIBBits;
if( bmInfo.bmiHeader.biBitCount > 8 )
lpDIBBits = (LPVOID)((LPDWORD)(bmInfo.bmiColors + bmInfo.bmiHeader.biClrUsed) +
((bmInfo.bmiHeader.biCompression == BI_BITFIELDS) ? 3 : 0));
else
lpDIBBits = (LPVOID)(bmInfo.bmiColors + nColors); // Create the logical palette
if( pPal != NULL )
{
// Create the palette
if( nColors <= 256 )
{
UINT nSize = sizeof(LOGPALETTE) + (sizeof(PALETTEENTRY) * nColors);
LOGPALETTE *pLP = (LOGPALETTE *) new BYTE[nSize]; pLP->palVersion = 0x300;
pLP->palNumEntries = nColors; for( int i=0; i < nColors; i++)
{
pLP->palPalEntry[i].peRed = bmInfo.bmiColors[i].rgbRed;
pLP->palPalEntry[i].peGreen = bmInfo.bmiColors[i].rgbGreen;
pLP->palPalEntry[i].peBlue = bmInfo.bmiColors[i].rgbBlue;
pLP->palPalEntry[i].peFlags = 0;
} pPal->CreatePalette( pLP ); delete[] pLP;
}
} CClientDC dc(NULL);
CPalette* pOldPalette = NULL;
if( pPal )
{
pOldPalette = dc.SelectPalette( pPal, FALSE );
dc.RealizePalette();
} HBITMAP hBmp = CreateDIBitmap( dc.m_hDC, // handle to device context
&bmiHeader, // pointer to bitmap size and format data
CBM_INIT, // initialization flag
lpDIBBits, // pointer to initialization data
&bmInfo, // pointer to bitmap color-format data
DIB_RGB_COLORS); // color-data usage bitmap.Detach();
bitmap.Attach( hBmp ); if( pOldPalette )
dc.SelectPalette( pOldPalette, FALSE ); ::GlobalFree(hDIB);
return TRUE;
}void CAviToolbar::SetBackImage ()
{
CReBarCtrl& rc = m_wndReBar.GetReBarCtrl (); for (UINT i = 0; i < rc.GetBandCount(); i++)
{
REBARBANDINFO info;
memset (&info, 0, sizeof (REBARBANDINFO));
info.cbSize = sizeof (info);
info.fMask = RBBIM_BACKGROUND;
info.hbmBack = m_bBackgroundImage ? (HBITMAP)m_bmpBack : NULL;
rc.SetBandInfo (i, &info); CRect rectBand;
rc.GetRect (i, rectBand); rc.InvalidateRect (rectBand);
rc.UpdateWindow (); info.fMask = RBBIM_CHILD;
rc.GetBandInfo (i, &info); if (info.hwndChild != NULL)
{
::InvalidateRect (info.hwndChild, NULL, TRUE);
::UpdateWindow (info.hwndChild);
}
}
}void CAviToolbar::LoadBackImage ()
{
if(m_bmpName.GetLength()>0)
LoadBMPImage(m_bmpName,m_bmpBack,NULL);
else
LoadBMPImage("res\\back.bmp",m_bmpBack,NULL);
}void CAviToolbar::OnSetskin()
{
// TODO: Add your command handler code here}void CAviToolbar::OnSysColorChange()
{
CToolBar::OnSysColorChange();
LoadBackImage ();
SetBackImage ();
}
漫漫看把!
首先很感谢你的帮忙。
有一些问题想向你请教:
我现在动态创建了一个工具条。现在想加上背景。我大致看了一下你提供的原码。
就我理解,用到的相关函数为:
LoadBMPImage、SetBackImage、LoadBackImage。我现在创建了一个工具条类CMyBar,派生自CToolbar,并加上上述三个函数和相关的属性,
然后生成一个对象m_wndPropBar并用Create函数创建。
然后依次调用LoadBackImage()和SetBackImage(),但并没有实现加上背景。
我跟踪了一下,发现在执行CReBarCtrl& rc = m_wndReBar.GetReBarCtrl()后
用rc.GetBandCount()得到的返回值是0,我对CReBar没有任何概念,你能给解释一下吗?我的工具条有好几个部分组成:有Button、Progress、Static等,但没有SEPARATOR
GetBandCount()得到的是什么,在MSDN中说是The number of bands assigned to the control. 这是什么意思。我的工具条现在可以正常显示。