比如说现在有人一个Bitmap资源ID是:IDB_BITMAP1,我想让他在对话框上显示白色为透明,请问高手们,我要怎么做?
最好就给个源码或者实例给我好么?。。
最好就给个源码或者实例给我好么?。。
解决方案 »
- 怎么能取到计算机的sid,不是用户的sid
- 在Javascript中调用activeX的方法为什么老是失败啊???
- 高分,急!含ActiveX 控件的 窗口 封装在 Dll 中,创建正常,能显示,可是在程序退出时,报错?晕
- 在cformview的onpaint事件中,我将图形画在cstatic标签上,为什么程序运行后,没有出现图形,拖动scrollbar才出现图形。
- 指定了Lib文件,仍然出现unresolved external symbol
- 谁知道类似QQ的局域网通讯软件的下载地址
- ASCII码转换成HEX码
- 如何查看dll中的函数,不是引出函数
- 使用CString类,会不会造成内存泄漏.
- 有关目录文件的问题
- CMFCMenuBar产生的菜单栏,如何动态添加菜单?
- 想买本关于流媒体传输技术的书
void Util::DrawTransparent(HDC hdc,HBITMAP hBit,int x,int y,int width,int height,COLORREF crColor)
{
// COLORREF crOldBack = ::SetBkColor(hdc,crColor);
COLORREF crOldBack = ::SetBkColor(hdc,RGB(255,255,255));
COLORREF crOldText = ::SetTextColor(hdc,RGB(0,0,0));
HDC dcImage,dcMask;
int nWidth = width;
int nHeight = height; dcImage = ::CreateCompatibleDC(hdc);
dcMask = ::CreateCompatibleDC(hdc);
//把图像装入image DC
RECT rect = {0,0,width,height};
HBITMAP htmp = NULL;
HGDIOBJ pOldBitmapImage = NULL;
{
htmp = ::CreateCompatibleBitmap(hdc,width,height);
pOldBitmapImage = ::SelectObject(dcImage,htmp); HDC htmpdc = ::CreateCompatibleDC(hdc);
::SelectObject(htmpdc,hBit);
/* HBRUSH hbr = ::CreateSolidBrush(crColor);
::FillRect(dcImage,&rect,hbr);
::DeleteObject(hbr);*/ SIZE *pSize = Util::GetBitSize(hBit);
::StretchBlt(dcImage,0,0,width,height,htmpdc,0,0,pSize->cx,pSize->cy,SRCCOPY); ::DeleteDC(htmpdc); }
//为“掩码”位图创建一个单色bitmap
HBITMAP bitmapMask;
bitmapMask = ::CreateBitmap(nWidth,nHeight, 1, 1, NULL);
HGDIOBJ pOldBitmapMask = ::SelectObject(dcMask,bitmapMask);
::SetBkColor(dcImage,crColor);
::BitBlt(dcMask,0, 0, nWidth, nHeight, dcImage, 0, 0, SRCCOPY);//分3步进行实际的绘制
::BitBlt(hdc,x, y, nWidth, nHeight, dcImage, 0, 0, SRCINVERT);
::BitBlt(hdc,x, y, nWidth, nHeight, dcMask, 0, 0, SRCAND);
::BitBlt(hdc,x, y, nWidth, nHeight, dcImage, 0, 0, SRCINVERT); //恢复原先设置 ::SelectObject(dcImage,pOldBitmapImage);
::SelectObject(dcMask,pOldBitmapMask);
::SetBkColor(hdc,crOldBack);
::SetTextColor(hdc,crOldText);
::DeleteObject(htmp);
::DeleteObject(bitmapMask);
::DeleteDC(dcImage);
::DeleteDC(dcMask);
}
Util::GetBitSize(hBit);
也贴出来吧
SIZE *Util::GetBitSize(HBITMAP hBit)
{
static SIZE size = {0,0};
BITMAP bminfo = {0};
GetObject(hBit, sizeof(BITMAP), &bminfo);
size.cy = bminfo.bmHeight;
size.cx = bminfo.bmWidth;
return &size;
}