如何使位图透明,不使用MFC,使用PICTURE控件的。重分感谢!!!

zhxhaixing 2005-10-09 01:56:06
我使用VC导入一张位置(有背景),然后用VC的PICTURE控件显示,背景不透明,请问大家如何处理?记住不使用MFC的。谢谢大家!!!
...全文
360 点赞 收藏 23
写回复
23 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
MyGrid 2005-12-10
作个记号,学习。。。
回复
huwei001982 2005-10-10
晕, 别人已经解释的非常详细了!
回复
goodboyws 2005-10-10
晕,你在资源编辑器里Picture好歹也要放个地方吧,效果是一样的。用Picture也解决不了分辨率的问题
回复
zhxhaixing 2005-10-09
怎么计算啊?用PICTURE根本不用管位置啊
回复
goodboyws 2005-10-09
你自己可以计算位置,跟你用Picture是一样的
回复
zhxhaixing 2005-10-09
效果是出来了,刚才我的正好有m_hImageList这个变量所以没报错。
不过这样直接指定坐标画可能存在这样的问题:当机器分辨器不一样的时候,会不会出现位置不好看的情况(因为在我机器上画出来刚好位置合适,换台不同分辨器的机子会不会出现位置不好看的情况)
回复
goodboyws 2005-10-09
ImageList_Add(hImageList, hBitmap, NULL);换为
ImageList_AddMasked(hImageList, hBitmap, RGB(0, 128, 128));//这是背景颜色
假定你的背景色是RGB(0, 128, 128);

不好意思,注意力不集中,总是敲错
原先是ImageList_AddMasked(m_hImageList, hBitmap, RGB(0, 128, 128));
回复
zhxhaixing 2005-10-09
PAINTSTRUCT ps;
HDC hdc = BeginPaint(&ps);
HBITMAP hBitmap= LoadBitmap(_Module.GetResourceInstance(), MAKEINTRESOURCE(IDB_BITMAP1));
BITMAP bm;
GetObject(hBitmap, sizeof(bm), &bm);
SIZE size;
size.cx = bm.bmWidth;
size.cy = bm.bmHeight;
HIMAGELIST hImageList = ImageList_Create(size.cx, size.cy, ILC_MASK | ILC_COLOR8, 0, 1);
ImageList_Add(hImageList, hBitmap, NULL);
ImageList_AddMasked(m_hImageList, hBitmap, RGB(0, 128, 128));//这是背景颜色
ImageList_Draw(hImageList, 0, hdc, 8, 8, ILD_TRANSPARENT);
EndPaint(&ps);
return 0;
这是我搬过来的代码,但是ImageList_Add(hImageList, hBitmap, NULL);去掉
则不管透明色设多少,图片都看不到,加上这句就行了。但是背景颜色没去掉。
回复
goodboyws 2005-10-09
HBITMAP hBitmap= LoadBitmap(hInstance, MAKEINTRESOURCE(IDB_BITMAP1));
BITMAP bm;
GetObject(hBitmap, sizeof(bm), &bm);
SIZE size;
size.cx = bm.bmWidth;
size.cy = bm.bmHeight;
回复
zhxhaixing 2005-10-09
就是图片背景透明,
BITMAP bm;
GetObject((HBITMAP)myBitmap.GetSafeHandle(), sizeof(bm), &bm);
SIZE size;
我是在ATL工程中用的,这些有错误
回复
goodboyws 2005-10-09
什么叫背景透明
回复
zhxhaixing 2005-10-09
goodboyws(深夜不眠者) ,你没有去除背景吧,背景要透明的
回复
goodboyws 2005-10-09
ImageList_Add(hImageList, hBitmap, NULL);去掉
回复
goodboyws 2005-10-09
呵呵,是我的代码有问题
PAINTSTRUCT ps;
HDC hdc = BeginPaint(hWnd, &ps);
HBITMAP hBitmap= LoadBitmap(hInstance, MAKEINTRESOURCE(IDB_BITMAP1));
BITMAP bm;
GetObject((HBITMAP)myBitmap.GetSafeHandle(), sizeof(bm), &bm);
SIZE size;
size.cx = bm.bmWidth;
size.cy = bm.bmHeight;
HIMAGELIST hImageList = ImageList_Create(size.cx, size.cy, ILC_MASK | ILC_COLOR24, 0, 1);
ImageList_Add(hImageList, hBitmap, NULL);
ImageList_AddMasked(m_hImageList, hBitmap, RGB(0, 128, 128));//这是背景颜色
ImageList_Draw(hImageList, 0, hdc, 20, 20, ILD_TRANSPARENT);
......
EndPaint(hdc, &ps);

回复
zhxhaixing 2005-10-09
100大洋全给你啦,你在哪里指定透明色的?
回复
goodboyws 2005-10-09
晕,你给我多少钱啊
回复
zhxhaixing 2005-10-09
能不能加点注释啊?看不太懂啊。
回复
goodboyws 2005-10-09
一样
PAINTSTRUCT ps;
HDC hdc = BeginPaint(hWnd, &ps);
HBITMAP hBitmap= LoadBitmap(hInstance, MAKEINTRESOURCE(IDB_BITMAP1));
BITMAP bm;
GetObject((HBITMAP)myBitmap.GetSafeHandle(), sizeof(bm), &bm);
SIZE size;
size.cx = bm.bmWidth;
size.cy = bm.bmHeight;
HIMAGELIST hImageList = ImageList_Create(size.cx, size.cy, ILC_MASK | ILC_COLOR24, 0, 1);
ImageList_Add(hImageList, hBitmap, NULL);
ImageList_Draw(hImageList, 0, hdc, 20, 20, ILD_TRANSPARENT);
......
EndPaint(hdc, &ps);

回复
zhxhaixing 2005-10-09
我不能使用MFC的啊。
回复
goodboyws 2005-10-09
你可以直接在对话框的OnPaint里画,
用ImageList

CPaintDC dc(this);
CBitmap myBitmap;
myBitmap.LoadBitmap(IDB_BITMAP1);
BITMAP bm;
GetObject((HBITMAP)myBitmap.GetSafeHandle(), sizeof(bm), &bm);
SIZE size;
size.cx = bm.bmWidth;
size.cy = bm.bmHeight;
CImageList imageList;
imageList.Create(size.cx, size.cy, ILC_MASK | ILC_COLOR24, 0, 1);//ILC_COLOR24指24位位图
imageList.Add(&bmGamePos, RGB(0, 128, 128));//这是背景颜色
CPoint pt(20, 20);
imageList.Draw(&dc, 0, pt, ILD_TRANSPARENT);
回复
发帖
界面
创建于2007-09-28

1.5w+

社区成员

VC/MFC 界面
申请成为版主
帖子事件
创建了帖子
2005-10-09 01:56
社区公告
暂无公告