我看系统的位图背景色都是黑色(#000000),我自己做的位图的背景色也做成黑色的。但是运行之后看到自己加的位图并不透明(位图用于Ribbon按钮上的)。这是为何?添加位图资源的时候需要设置透明背景色么?请指点,谢谢

解决方案 »

  1.   

    位图本身并没有透明的概念,只是在绘制的时候 把某个特定的颜色认为是透明,做了一些处理绘制的时候 试试
    SetStretchBltMode(WHITEONBLACK);
    AlphaBlend(……)
      

  2.   

    使用SetLayeredWindowAttributes函数可以设置整个窗口的透明色,方法如下,
    SetLayeredWindowAttributes(this->m_hWnd, RGB(255, 0, 255), NULL, 1);
    建议将透明色设成0xff00ff,因为黑色一般字体都会用到,容易混淆
    如果按钮也是继承于CWnd的话也可以通过hWnd将函数直接作用于按钮
      

  3.   

    目前想到的只有重新写自己的按钮类,绘制图片的时候通过TransparentBlt来画了
      

  4.   

    不好意思,我问题问得不好。位图是用于RIBBON功能区的按钮,我自己试着建一个新的office style的工程。把另一个工程上系统有的两个位图(在原工程能够透明,新建的工程没有这两个位图)添加到资源上,ID标为IDB_1,IDB_2。CMFCRibbonCategory* pCategory = m_wndRibbonBar.AddCategory(_T("&Buttons"), IDB_1, IDB_2);CMFCRibbonPanel* pPanel1 = pCategory->AddPanel(_T("Large Buttons"));CMFCRibbonButton* pBtn1 = new CMFCRibbonButton(ID_FILE_OPEN, _T("Button"), 0, 0);pBtn1->SetAlwaysLargeImage();pPanel1->Add(pBtn1);
    结果能够显示,而且是透明的。但是我在资源里添加自己做的两个位图(背景色跟所删位图一样),ID标为IDB_3,IDB_4,把第一句代码里的IDB_1,IDB_2改为IDB_3,DIB_4,却不能透明.这证明了跟代码是完全没关系的,而应该跟资源本身有关。哪位大大比较了解ribbon的位图透明机制的?
      

  5.   

    我自己找到资料了,放上来给有需要的:
    http://hi.baidu.com/520oy/blog/item/70aa4513aea13139dc540148.html感谢回答问题的各位,散分了