自定义工具栏OnEraseBkgnd函数怎么无效?

q06380925 2009-11-12 12:14:17
我的程序如下:

BOOL CToolBarEx::OnEraseBkgnd( CDC* pDC )
{
MessageBox(0);
CBrush brush;
brush.CreateSolidBrush(RGB(0,0,255));
CBrush *pOldBrush= pDC->SelectObject(&brush);
CRect rc;
GetClientRect(&rc);
pDC->Rectangle(&rc);
pDC->SelectObject(pOldBrush);

return TRUE;
}

工具栏背景并没有变,只有工具栏左侧可拖动的那个小夹子颜色变了,
请帮忙解决下!!!
...全文
798 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
summitzhou 2011-09-02
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 q06380925 的回复:]
问题解决了饿,结果令我实在无语...
原来问题出在项目属性的字符集设置上,如果设置成 Unicode 字符集,背景就会被OnPaint给刷掉
如果设置成 多字节字符集,那就可以正常显示了。
哎,这是什么原因呢?有哪位知道的帮忙解释下。
[/Quote]

还真是您说的这样。。。
SoftwKLC 2010-08-20
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 q06380925 的回复:]

问题解决了饿,结果令我实在无语...
原来问题出在项目属性的字符集设置上,如果设置成 Unicode 字符集,背景就会被OnPaint给刷掉
如果设置成 多字节字符集,那就可以正常显示了。
哎,这是什么原因呢?有哪位知道的帮忙解释下。
[/Quote]

象你这种情况,能不能不更改项目字符集,你最终是怎么解决的啊?
q06380925 2009-11-12
  • 打赏
  • 举报
回复
工具条上应该是显示按钮图片吧,按钮间的空隙算是背景吧
快乐鹦鹉 2009-11-12
  • 打赏
  • 举报
回复
这个没法解决吧。工具条背景上显示了工具条图片,本来背景你就基本看不到的。
hzy694358 2009-11-12
  • 打赏
  • 举报
回复
mark
q06380925 2009-11-12
  • 打赏
  • 举报
回复
问题解决了饿,结果令我实在无语...
原来问题出在项目属性的字符集设置上,如果设置成 Unicode 字符集,背景就会被OnPaint给刷掉
如果设置成 多字节字符集,那就可以正常显示了。
哎,这是什么原因呢?有哪位知道的帮忙解释下。
wwgddx 2009-11-12
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 happyparrot 的回复:]
这个没法解决吧。工具条背景上显示了工具条图片,本来背景你就基本看不到的。
[/Quote]

如上所说,你画的背景是会被工具条图片覆盖的,如果你的图片已经加上背景或透明的话,应该是可以和工具条背景容为一体的,但你如果使用了XPStyle风格的话,就会出现工具条图片小于按钮区域,按钮和按钮之间会出现系统灰色背景.要解决这个问题只有在OPAINT里面自己重绘了,一个一个画.

上面的方法只能解决工具栏就是可以拖动的那一块,右边的那边不算工具栏区域可以用下面方法解决,但是牺牲了可移动和停靠功能.
[Quote=引用 3 楼 webing520 的回复:]
工具栏就是可以拖动的那一块,右边的那边不算工具栏区域。
据说要达到你要的效果,需要把工具栏的停靠的那三句话给屏蔽掉。OnCreate()函数里面的。
楼主可以试一下。
C/C++ code// TODO: 如果不需要工具栏可停靠,则删除这三行//m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);//EnableDocking(CBRS_ALIGN_ANY);//DockControlBar(&m_wndToolBar);
[/Quote]


要想完美解决,请看
http://topic.csdn.net/u/20091023/14/2570ed4f-23e5-4bd2-ae2f-ce76f9943a45.html
q06380925 2009-11-12
  • 打赏
  • 举报
回复
是不是OnPaint会把背景覆盖了啊?
q06380925 2009-11-12
  • 打赏
  • 举报
回复
这三句我注释了啊,没用的
webing520 2009-11-12
  • 打赏
  • 举报
回复
工具栏就是可以拖动的那一块,右边的那边不算工具栏区域。
据说要达到你要的效果,需要把工具栏的停靠的那三句话给屏蔽掉。OnCreate()函数里面的。
楼主可以试一下。

// TODO: 如果不需要工具栏可停靠,则删除这三行
//m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
//EnableDocking(CBRS_ALIGN_ANY);
//DockControlBar(&m_wndToolBar);

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧