自定义了一个ToolBar,通过OnEraseBkgnd来改变它的背景。
当程序使用多字节编码方式时,背景就是OnEraseBkgnd中所设置的。
当程序使用UNICODE编码方式时,背景没有被绘制出来,怀疑是被OnPaint给盖住了。
遇到的兄弟,帮忙解决一下。绘制背景代码如下(OnEraseBkgnd中,):if (pDC != NULL && pDC->GetSafeHdc() != NULL)
{
RECT rect;
GetWindowRect(&rect);
ScreenToClient(&rect);
pDC->FillRect(&rect,&m_Brush);
return TRUE;
}
else
return CToolBar::OnEraseBkgnd(pDC);
多字节下显示效果:
UNICDOE显示效果:

解决方案 »

  1.   

    XP控件风格的问题,使用与不使用XP风格控件内的处理是不同的。VS.NET默认在使用Unicode字符集的时候使用XP风格,在stdafx.h最后有一个#ifdef _UNICODE,你可以自己修改一下。
      

  2.   


    恩,UNICODE和多字节使用不同的控件风格。所以我也怀疑是控件绘制的方式有所不同。我明天试试。
      

  3.   


    cnzdgs厉害,把#if _UNCODE部分屏蔽之后,UNICODE编译出来和多字节的效果完全一致了。
    不过随之而来的是,xp风格的控件也没了。
    不知道有没办法解决?
      

  4.   

    多字节编码方式下,如果添加
    #pragma comment(linker,"/manifestdependency:\"type='win32……
    语句,能显示XP风格控件,但同时背景色刷新又不正确了,貌似不能两全。
      

  5.   

    遇到类似的问题,Google了半天,最后找到了MSDN上的解释:you cannot change a toolbar's color when a visual style is active. To change a toolbar's color in Version 6.0, you must first disable visual styles by calling SetWindowTheme and specifying no visual style~~
    结合sjdev的解释,实际上问题还是出在控件自身的实现上, 老火~~根本上跟是否UNICODE没关系,当然,.net例外