none
可能是CMFCToolBar里中自定义透明色的一个BUG RRS feed

  • 问题

  •        可以通过CMFCToolBar::GetImages()->SetTransparentColor(RGB(0,0,0));来设置ToolBar图标的透明色。

           但是在afxtoolbar.cpp的DoPaint(CDC* pDCPaint)函数中又重新设置了透明色,使原先的透明色无效。

           第1429行:pHotImages->SetTransparentColor(afxGlobalData.clrBtnFace);

           请问大家没有什么好的办法?

    2008年10月14日 7:57

答案

  • 我使用的是32位的位图做图标,所以与ICO不同没有自动透明的支持。

    我查看了afxtoolbar.cpp的源代码,的确是用按钮的颜色(afxGlobalData.clrBtnFace)做为透明色的。但afxGlobalData.clrBtnFace会因为系统的配色方案的修改而发生了变化。

    如果将当前图标的透明色设定为RGB(0,0,0),而到了客户那里因为使用了其它的配色方案,按钮的颜色为RGB(255,255,255)。那样的话在客户系统出现显示上的问题。

     

     1421:CMFCToolBarImages* pImages = GetImageList(m_Images, m_ImagesLocked, m_LargeImages, m_LargeImagesLocked);
     1422:CMFCToolBarImages* pHotImages = pImages;

     

    pHotImages 使用的就是正常显示时的images

    2008年10月15日 8:14

全部回复

  •  

    不要轻易怀疑MS的类库,毕竟那都是高手写的,而且经过了长期的检验。。。

     

    你有没有注意到,第1429行是设置pHotImages的,就是当鼠标移到上面后显示的图像。

    另外,从常理说,透明色为黑色是什么用意??为按钮的颜色才是合理的啊。

    2008年10月15日 4:46
  • 我使用的是32位的位图做图标,所以与ICO不同没有自动透明的支持。

    我查看了afxtoolbar.cpp的源代码,的确是用按钮的颜色(afxGlobalData.clrBtnFace)做为透明色的。但afxGlobalData.clrBtnFace会因为系统的配色方案的修改而发生了变化。

    如果将当前图标的透明色设定为RGB(0,0,0),而到了客户那里因为使用了其它的配色方案,按钮的颜色为RGB(255,255,255)。那样的话在客户系统出现显示上的问题。

     

     1421:CMFCToolBarImages* pImages = GetImageList(m_Images, m_ImagesLocked, m_LargeImages, m_LargeImagesLocked);
     1422:CMFCToolBarImages* pHotImages = pImages;

     

    pHotImages 使用的就是正常显示时的images

    2008年10月15日 8:14
  • UP

     

    2008年10月17日 9:18