首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

生成一个背景透明的dc的有关问题

2012-03-18 
生成一个背景透明的dc的问题?我做了一个移动棋子的游戏,移动棋子,我想实现棋子随鼠标移动的效果,做法如下:

生成一个背景透明的dc的问题?
我做了一个移动棋子的游戏,移动棋子,我想实现棋子随鼠标移动的效果,
做法如下:
1,当鼠标点击到棋盘上,取得该棋盘上棋子的信息;
2,根据该棋子的信息 取到棋子对应的位图文件;
3,将妻子放到一块dc中;
实现棋子随鼠标移动的效果

代码如下,但是拖动的时候棋子的背景并不透明

CDC m_DragMem;
pItemImg 为棋子对应的位图
m_bmpErase 为背景为白色的位图
怎么做才能再拖动过程中 让m_DragMem 中的内容除了文字和图像以外为透明色

CDC *pDC = GetDC();
CDC memImg;
CDC memTemp;

memImg.CreateCompatibleDC( pDC);
memImg.SelectObject( pItemImg);

memTemp.CreateCompatibleDC( pDC);
memTemp.SelectObject( &m_bmpErase);

pDC ->TransparentBlt( 12, 0, 40, 40, &memImg, 0, 0, 40, 40, SRCCOPY);

pDC ->SetBkMode( TRANSPARENT);
pDC ->TextOut( 0, 40, "芙蓉姐夫<-->水煮鱼");

  m_DragMem.SetBkMode( TRANSPARENT);
m_DragMem.TransparentBlt( 0, 0, 64, 64, pDC, 0, 0, 64, 64, SRCCOPY);


[解决办法]
一个透明位图类的例子
透明位图的显示
[解决办法]
好像要棋子的位图是.png格式的才好做出透明效果,BMP格式的本身就不透明。
[解决办法]
利用掩码位图来实现透明,不能直接SRCCPY
[解决办法]
bmp格式的也可以做成透明的!
例如:
BitBlt(mdc,0,0,298,329,bufdc,298,0,SRCAND);
BitBlt(mdc,0,0,298,329,bufdc,0,0,SRCPAINT);

需要先做与,再做或运算。


for(y=ystart;y<yend;y++)
{
for(x=xstart;x<xend;x++) 
{
rgb_b = y * bm1.bmWidthBytes + x * PxBytes ;

px1[rgb_b] = px1[rgb_b] * 0.7;
px1[rgb_b+1] = px1[rgb_b+1] * 0.7;
px1[rgb_b+2] = px1[rgb_b+2] * 0.7;
}
}


for(y=0;y<(bm2.bmHeight); y++)
{
for(x=0;x<bm2.bmWidth; x++) 
{
rgb_b = y * bm2.bmWidthBytes + x * PxBytes ;
i = (ystart+y) * bm1.bmWidthBytes + (xstart+x) * PxBytes;

px2[rgb_b] = px2[rgb_b] *0.3 + px1[i];
px2[rgb_b+1] = px2[rgb_b+1] *0.3 + px1[i+1];
px2[rgb_b+2] = px2[rgb_b+2] *0.3 + px1[i+2];
}
}

其中0.3 0.7 是根据你自己的需要来定的!
[解决办法]
帮顶··
[解决办法]
路过!
[解决办法]
DC 是没有背景透明这一说的,只不过是他的背景色和父窗口一致罢了
[解决办法]
TransparentBlt( 0, 0, 64, 64, pDC, 0, 0, 64, 64, SRCCOPY); 
???
应该是
TransparentBlt( 0, 0, 64, 64, pDC, 0, 0, 64, 64, colorkey);

热点排行