透明处理位图。

void CLoginDialog::OnPaint()
{
 CPaintDC dc(GetDlgItem(IDC_STATIC_RECT));
 // TODO: Add your message handler code here and/or call default
 CRect rect;
 m_staRect.GetClientRect(&rect);   // 得到static客户区矩形
 
// BITMAP bm;
// m_bmpLogon.GetBitmap(&bm);

 CDC dcSrc;
 dcSrc.CreateCompatibleDC(&dc);   // 创建一个与目标DC相兼容的设备环境。
 CBitmap *pOldSrcBmp = dcSrc.SelectObject(&m_bmpLogon);

 CDC dcDes;
 dcDes.CreateCompatibleDC(&dc);  // 创建临时的目标DC设备环境。

 CBitmap maskBitmap;
 maskBitmap.CreateBitmap(rect.Width(), rect.Height(), 1, 1, NULL); // 创建一个单色掩码位图
 CDC maskDc;        // 创建设备环境maskDc
 maskDc.CreateCompatibleDC(&dc);   // 创建与当前掩码设备相兼容的设备环境。
 CBitmap * pOldMaskBmp = maskDc.SelectObject( &maskBitmap );

 dcDes.BitBlt( 0, 0, rect.Width(), rect.Height(), &dcSrc, 0, 0, SRCCOPY ); // 将位图临时拷贝到内存dc中。
 dcDes.SetBkColor(RGB(0x00,0x00,0xff));   // 设置位图透明色。
 
 // 生成透明区域为白色,其它区域为黑色的掩码位图.
 maskDc.BitBlt(0, 0, rect.Width(),rect.Height(), &dcDes, 0, 0, SRCCOPY); 

 // 生成透明区域为黑色,其它区域保持不变的位图.
 dcDes.SetBkColor(RGB(0, 0, 0));
 dcDes.BitBlt(0, 0, rect.Width(), rect.Height(), &maskDc, 0, 0, SRCAND);

 // 透明部分保持屏幕不变,其它部分变成黑色.
 dc.SetBkColor(RGB(0xff,0xff,0xff));
 dc.BitBlt(0, 0, rect.Width(), rect.Height(), &maskDc, 0, 0, SRCAND);

 // "或"运算,生成最终效果.
 dc.BitBlt(0, 0, rect.Width(), rect.Height(), &dcDes, 0, 0, SRCPAINT);

 dcSrc.SelectObject(pOldSrcBmp);
 dcSrc.DeleteDC();

 dcDes.DeleteDC();

 maskDc.SelectObject(pOldMaskBmp);
 maskDc.DeleteDC();
}
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值