求解为什么这两个图片用transparentblt的用法函数设置透明背景无效?

其他回答(2)
照每天快照更新都是建设中,如何修改求解答求帮助 急急急 qq  306011691
帮忙提个问题把   自己提交不了
你先看看图片本身背景是否透明吧
&&&您需要以后才能回答,未注册用户请先。//建立消息
int&CGameClientView::OnCreate(LPCREATESTRUCT&lpCreateStruct)
if&(__super::OnCreate(lpCreateStruct)==-1)&return&-1;
//创建控件
CRect&rcCreate(0,0,0,0);
//下注按钮
m_btJetton100.Create(NULL,WS_CHILD|WS_VISIBLE|WS_DISABLED,rcCreate,this,IDC_JETTON_BUTTON_100);
m_btJetton1000.Create(NULL,WS_CHILD|WS_VISIBLE|WS_DISABLED,rcCreate,this,IDC_JETTON_BUTTON_1000);
m_btJetton10000.Create(NULL,WS_CHILD|WS_VISIBLE|WS_DISABLED,rcCreate,this,IDC_JETTON_BUTTON_10000);
m_btJetton100000.Create(NULL,WS_CHILD|WS_VISIBLE|WS_DISABLED,rcCreate,this,IDC_JETTON_BUTTON_100000);
m_btJetton1000000.Create(NULL,WS_CHILD|WS_VISIBLE|WS_DISABLED,rcCreate,this,IDC_JETTON_BUTTON_1000000);
m_btJetton5000000.Create(NULL,WS_CHILD|WS_VISIBLE|WS_DISABLED,rcCreate,this,IDC_JETTON_BUTTON_5000000);
//申请按钮
m_btApplyBanker.Create(NULL,WS_CHILD|WS_VISIBLE|WS_DISABLED,rcCreate,this,IDC_APPY_BANKER);
m_btCancelBanker.Create(NULL,WS_CHILD|WS_DISABLED,rcCreate,this,IDC_CANCEL_BANKER);
m_btScoreMoveL.Create(NULL,WS_CHILD|WS_VISIBLE|WS_DISABLED,rcCreate,this,IDC_SCORE_MOVE_L);
m_btScoreMoveR.Create(NULL,WS_CHILD|WS_VISIBLE|WS_DISABLED,rcCreate,this,IDC_SCORE_MOVE_R);
m_btBankerMoveUp.Create(NULL,&WS_CHILD|WS_VISIBLE|WS_DISABLED,&rcCreate,&this,&IDC_BANKER_UP);
m_btBankerMoveDown.Create(NULL,WS_CHILD|WS_VISIBLE|WS_DISABLED,&rcCreate,&this,&IDC_BANKER_DOWN);
m_btBankButton.Create(NULL,&WS_CHILD|WS_VISIBLE,&rcCreate,&this,&IDC_USER_BANK);
//设置按钮
HINSTANCE&hResInstance=AfxGetInstanceHandle();
m_btJetton100.SetButtonImage(IDB_BT_JETTON_100,hResInstance,false);
m_btJetton1000.SetButtonImage(IDB_BT_JETTON_1000,hResInstance,false);
m_btJetton10000.SetButtonImage(IDB_BT_JETTON_10000,hResInstance,false);
m_btJetton100000.SetButtonImage(IDB_BT_JETTON_100000,hResInstance,false);
m_btJetton1000000.SetButtonImage(IDB_BT_JETTON_1000000,hResInstance,false);
m_btJetton5000000.SetButtonImage(IDB_BT_JETTON_5000000,hResInstance,false);
m_btBankButton.SetButtonImage(IDB_BANK,&hResInstance,&false);
m_btApplyBanker.SetButtonImage(IDB_BT_APPLY_BANKER,hResInstance,false);
m_btCancelBanker.SetButtonImage(IDB_BT_CANCEL_APPLY,hResInstance,false);
m_btScoreMoveL.SetButtonImage(IDB_BT_SCORE_MOVE_L,hResInstance,false);
m_btScoreMoveR.SetButtonImage(IDB_BT_SCORE_MOVE_R,hResInstance,false);
m_btBankerMoveUp.SetButtonImage(IDB_BT_BANKER_UP,&hResInstance,&false);
m_btBankerMoveDown.SetButtonImage(IDB_BT_BANKER_DOWN,&hResInstance,&false);
m_fontScoreLimit.CreateFont(-16,0,0,0,500,0,0,0,134,3,2,ANTIALIASED_QUALITY,2,TEXT(&宋体&));
现在的按钮带有BMP图片的背景色,请教如何使他的背景变成透明的!!!
回复讨论(解决方案)
在按钮刚生成的时候用一个bitmap或者memDC把该区域的背景保存下来,然后当需要使按钮透明时就把背景画上去。
我来回答,重绘!你的SetButtonImage是个什么东东,难道你哩btn是自绘的了吗?估计M$标准的控件都不支持透明哦~
这是SetButtonImage!!!
bool&CSkinButton::SetButtonImage(LPCTSTR&pszFileName,&bool&bExpandImage)
&&&&//效验参数
&&&&ASSERT(pszFileName);
&&&&if&(pszFileName==NULL)&return&
&&&&//加载位图
&&&&m_bExpand=bExpandI
&&&&m_ImageBack.SetLoadInfo(pszFileName);
&&&&//调整位置
&&&&if&(m_bExpand==false)&FixButtonSize();
&&&&if&(GetSafeHwnd())&Invalidate(FALSE);
&&&&return&
上面是另一个SetButtonImage(LPCTSTR&pszFileName,&bool&bExpandImage)
我现在发这个程序中的SetButtonImage(UINT&uBitmapID,&HINSTANCE&hInstance,&bool&bExpandImage)
bool&CSkinButton::SetButtonImage(UINT&uBitmapID,&HINSTANCE&hInstance,&bool&bExpandImage)
//加载位图
ASSERT(uBitmapID!=0);
if&(uBitmapID==0)&return&
m_bExpand=bExpandI
m_ImageBack.SetLoadInfo(uBitmapID,hInstance);
//调整位置
if&(m_bExpand==false)&FixButtonSize();
if&(GetSafeHwnd())&Invalidate(FALSE);
DrawItem或者CtlColor里处理背景相关的了么。。?
要不试下用GDI+来实现吧。。用GDI+的话可以用PNG图片。。
如果用GDI+PNG的话,框架全部都要重写,现在就用BMP图片,要怎么解决呢,能否给出一个例子,感激!!!
这就是网狐里面那个吧,它里面不是有个CRgnButton的类&用那不就可以了。
如果用GDI+PNG的话,框架全部都要重写。不用吧,稍微改下就可以了吧
上面是另一个SetButtonImage(LPCTSTR&pszFileName,&bool&bExpandImage)
我现在发这个程序中的SetButtonImage(UINT&uBitmapID,&HINSTANCE&hInstance,&bool&bExpandImage)
C/C++&code
bool&CSkinButton::SetButtonImage(UINT&……
你找找CSkinButton类,看看是怎么把那个bmp图片画到Button的DC上的,没做透明处理的画就处理一下啊,
网上一大推资料啊,给你个网址:/view/4714826.htm
如果你说的BMP背景透明是透明特征色的话
可以用TransparentBlt函数自绘
并重写CtlColor函数,返回(HBRUSH)::GetStockObject(NULL_BRUSH)
就能透明特征色了
感谢大家的帮助!!!!
靠..我说怎么CSDN上还有问关于这个的问题..搞半天是你...LZ很有才 ̄ ̄关于把按钮BMP图片的背景变透明的问题!!!
[问题点数:30分,结帖人x858078]
关于把按钮BMP图片的背景变透明的问题!!!
[问题点数:30分,结帖人x858078]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
本帖子已过去太久远了,不再提供回复功能。C++ 设置透明背景图片
投稿:hebedich
字体:[ ] 类型:转载 时间:
这篇文章主要介绍了C++ 设置透明背景图片的相关资料,需要的朋友可以参考下
有两个图片,一个是目标背景图片, 一个是带有自身背景色彩的彩色图片
先将这彩色图片绘制到目标背景图片中, 这一步通过BITBLT就可实现。&& 但实现后的效果是: 目标图片上,绘制上去的彩色图片带有其本身的背景。
问题就来了, 我们想将彩色图片本身的背景去掉,应该如何解决?
解决方法:
使用API函数:TransparentBlt&& 此函数将原DC中的图片绘制到目标DC中,并同时设置原图形在目标图形上的透明色。
BOOL TransparentBlt(
HDC hdcDest,
// handle to destination DC
int nXOriginDest,
// x-coord of destination upper-left corner
int nYOriginDest,
// y-coord of destination upper-left corner
int nWidthDest,
// width of destination rectangle
int hHeightDest,
// height of destination rectangle
HDC hdcSrc,
// handle to source DC
int nXOriginSrc,
// x-coord of source upper-left corner
int nYOriginSrc,
// y-coord of source upper-left corner
int nWidthSrc,
// width of source rectangle
int nHeightSrc,
// height of source rectangle
UINT crTransparent // color to make transparent
如本例中,将透明色设置为彩色图形自带背景色时, 则使用此函数后,所得最终图形上彩色图形的自身背景色就消除了。
CDC* pDC=GetDC();
bmp.LoadBitmap(IDB_BITMAP1);
BITMAP bmpI
bmp.GetObject(sizeof(BITMAP),&bmpInfo);
CDC ImageDC;
ImageDC.CreateCompatibleDC(pDC);
CBitmap *pOldImageBmp=ImageDC.SelectObject(&bmp);
CBitmap bmpBK;
bmpBK.LoadBitmap(IDB_BITMAP2);
BITMAP bmpBkI
bmpBK.GetObject(sizeof(BITMAP),&bmpBkInfo);
bkDC.CreateCompatibleDC(pDC);
bkDC.SelectObject(&bmpBK);
TransparentBlt(bkDC.m_hDC,100,150,bmpInfo.bmWidth,bmpInfo.bmHeight,ImageDC.m_hDC,0,0,bmpInfo.bmWidth,bmpInfo.bmHeight,RGB(255,0,0)); // 设置红色为透明色
BitBlt(pDC-&m_hDC,0,0,bmpBkInfo.bmWidth,bmpBkInfo.bmHeight,bkDC.m_hDC,0,0,SRCCOPY); //画到屏幕上
原理: 通过设置掩码位图来实现
&&&&&&&&&&&&& 1)首先建立掩码位图
&&&&&&&&&&&&& 2)使用掩码位图作用于彩色原图,得到变异新图(透明色为黑,其他区域为原色)
&&&&&&&&&&&&& 3)使用掩码位图与目标背景图相与 (透明区域为透明色,其他区域为黑色)
&&&&&&&&&&&&& 4)使用变异新图与目标背景图相或& ,得到最终图
以上所述就是本文的全部内容了,希望大家能够喜欢。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具请教如何解决双缓冲刷新和半透明控件显示背景的矛盾
[问题点数:100分,结帖人cyfage]
请教如何解决双缓冲刷新和半透明控件显示背景的矛盾
[问题点数:100分,结帖人cyfage]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
2012年12月 总版技术专家分月排行榜第一2012年10月 总版技术专家分月排行榜第一2012年9月 总版技术专家分月排行榜第一2012年8月 总版技术专家分月排行榜第一
2012年11月 总版技术专家分月排行榜第三
2012年12月 总版技术专家分月排行榜第一2012年10月 总版技术专家分月排行榜第一2012年9月 总版技术专家分月排行榜第一2012年8月 总版技术专家分月排行榜第一
2012年11月 总版技术专家分月排行榜第三
本帖子已过去太久远了,不再提供回复功能。

我要回帖

更多关于 vb gditransparentblt 的文章

 

随机推荐