主题:工具栏的重绘问题
我想给一个工具栏增加背景(通过CReBar实现),而且是不断变换的(通过设置定时器实现)。
在OnCreate中的代码如下:
m_rebar.Create(this);
m_rebar.AddBar(&m_wndToolBar);
REBARBANDINFO info;
info.cbSize = sizeof(info);
info.fMask = RBBIM_BACKGROUND;
m_wndToolBar.ModifyStyle(0, TBSTYLE_TRANSPARENT);
info.hbmBack = ::LoadBitmap(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDB_BITMAP1));
m_rebar.GetReBarCtrl().SetBandInfo(0, &info);
SetTimer(1, 500, NULL);
在OnTimer中的代码如下:
REBARBANDINFO info;
info.cbSize = sizeof(info);
info.fMask = RBBIM_BACKGROUND;
static int nIndex = 1;
m_wndToolBar.ModifyStyle(0, TBSTYLE_TRANSPARENT);
info.hbmBack = ::LoadBitmap(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDB_BITMAP1 + ((nIndex++) % 3)));
m_rebar.GetReBarCtrl().SetBandInfo(0, &info);
m_rebar.Invalidate(TRUE);
最后的结果是:两边的颜色在变换,可是工具栏中间的颜色没有变,但是用东西遮盖以后,发生重绘以后颜色就改变了。
所以,怎么让工具栏在代码中重绘啊?
在OnCreate中的代码如下:
m_rebar.Create(this);
m_rebar.AddBar(&m_wndToolBar);
REBARBANDINFO info;
info.cbSize = sizeof(info);
info.fMask = RBBIM_BACKGROUND;
m_wndToolBar.ModifyStyle(0, TBSTYLE_TRANSPARENT);
info.hbmBack = ::LoadBitmap(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDB_BITMAP1));
m_rebar.GetReBarCtrl().SetBandInfo(0, &info);
SetTimer(1, 500, NULL);
在OnTimer中的代码如下:
REBARBANDINFO info;
info.cbSize = sizeof(info);
info.fMask = RBBIM_BACKGROUND;
static int nIndex = 1;
m_wndToolBar.ModifyStyle(0, TBSTYLE_TRANSPARENT);
info.hbmBack = ::LoadBitmap(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDB_BITMAP1 + ((nIndex++) % 3)));
m_rebar.GetReBarCtrl().SetBandInfo(0, &info);
m_rebar.Invalidate(TRUE);
最后的结果是:两边的颜色在变换,可是工具栏中间的颜色没有变,但是用东西遮盖以后,发生重绘以后颜色就改变了。
所以,怎么让工具栏在代码中重绘啊?