读书人

位图透明处理有关问题。想在一个对话框

发布时间: 2012-02-04 15:43:09 作者: rapoo

位图透明处理问题。想在一个对话框中的static中透明显示一副位图。不知道为什么它就是显示不出来?大家帮忙看看。
void CLoginDialog::OnPaint()
{
CPaintDC dc(GetDlgItem(IDC_STATIC_RECT));

// TODO: Add your message handler code here and/or call default
CBitmap* pOldLogon = m_dcLogon.SelectObject(&m_bmpLogon);
CRect rect;
m_staRect.GetClientRect(&rect); // 得到客户区矩形

CDC maskDc; // 创建设备环境maskDc
CBitmap maskBitmap;
maskDc.CreateCompatibleDC(&dc);// 创建与当前设备相兼容的设备
maskBitmap.CreateBitmap(rect.Width(), rect.Height(), 1, 1, NULL);// 创建一个单色掩码位图
CBitmap* pOldMaskDCBitmap = maskDc.SelectObject( &maskBitmap );// 选入单色图
COLORREF clrTrans= m_dcLogon.GetPixel(2, 2);// 取得要消除的背景色值
maskDc.SetBkColor(clrTrans);

maskDc.BitBlt(0, 0, rect.Width(), rect.Height(), &m_dcLogon, 0, 0, SRCCOPY ); // 将位图拷贝到maskDc
m_dcLogon.BitBlt( 0, 0, rect.Width(), rect.Height(), &maskDc, 0, 0, PATINVERT );// 位图与mask做‘与’运算
m_dcLogon.BitBlt( 0, 0, rect.Width(), rect.Height(), &maskDc, 0, 0, SRCCOPY );// 显示位图。

maskDc.DeleteDC();
m_dcLogon.SelectObject(pOldLogon);
dc.SelectObject(pOldMaskDCBitmap);
}

[解决办法]
子类化static,把绘制代码改到CMyStatic::OnPaint()中就可以了。

读书人网 >VC/MFC

热点推荐