如何让CMFCToolBar识别图像蒙版?

时间:2009-05-08 10:43:00

标签: c++ transparency mask mfc-feature-pack 24-bit

我有一个CMFCToolBar派生类,其内容是CDockablePane派生类的成员。

我查看了VisualStudioDemo示例,看看它是如何完成的并且到目前为止已经完成了这个:

int CMyPane::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
    // Removed all "return -1 on error" code for better readability

    CDockablePane::OnCreate(lpCreateStruct);

    if(m_toolBar.Create(this, AFX_DEFAULT_TOOLBAR_STYLE, IDR_MY_TOOLBAR) &&
       m_toolBar.LoadToolBar(IDR_MY_TOOLBAR, 0, 0, TRUE /* Is locked */))
    {

        if(theApp.m_bHiColorIcons) // Is true, i.e. following code is executed
        {
            m_toolBar.CleanUpLockedImages();
            m_toolBar.LoadBitmap(IDB_MY_TOOLBAR_24, 0, 0, TRUE /*Locked*/);
        }

        m_toolBar.SetPaneStyle(m_toolBar.GetPaneStyle() | CBRS_TOOLTIPS | CBRS_FLYBY);
        m_toolBar.SetPaneStyle(m_toolBar.GetPaneStyle() & ~(CBRS_GRIPPER | CBRS_SIZE_DYNAMIC | CBRS_BORDER_TOP | CBRS_BORDER_BOTTOM | CBRS_BORDER_LEFT | CBRS_BORDER_RIGHT));

        m_toolBar.SetOwner(this);

        // All commands will be routed via this control , not via the parent frame:
        m_toolBar.SetRouteCommandsViaFrame(FALSE);
    }

    return 0;
}

加载高色图像(24位)但可见品红色蒙版(R255 G0 B255)。我看不出如何告诉工具栏识别面具 这甚至可能吗?

3 个答案:

答案 0 :(得分:3)

我不知道这是否每次都有效,但是我使用RGB(192, 192, 192)作为蒙版颜色,它确实被识别出来。

(好像CMFCToolBar控件准备使用::GetSysColor(COLOR_BTNFACE)作为透明色......)

答案 1 :(得分:0)

我刚刚发现一种解决方法是将32位图像与alpha通道一起使用。 我之前尝试过使用32位图像,但由于某些其他原因没有让它工作,然后认为32位图像不起作用。

答案 2 :(得分:0)

如果您想使用32位图片,请不要使用CBitmap而是使用ATL::CImageCPNGImage object并加载相应的resource ID