请问关于TransparentBlt()的正确使用方法

ivan121282 2006-01-28 05:37:20
画面显示正确,但画面不停的闪,如何解決??

void myPaint()
{
HDC hdc , mdc;
HBITMAP oldImage;
hdc = GetDC(hWnd);
mdc = CreateCompatibleDC(hdc);
SelectObject(mdc , image1);
BitBlt(hdc,0 , 0 , width , height , mdc , 0 , 0 ,SRCCOPY);
oldImage = (HBITMAP)SelectObject(mdc,image2);
TransparentBlt(hdc, 0, 0, width, height, mdc, 0, 0, width, height,
RGB(0x00,0x00,0x00));
DeleteObject(oldImage);
DeleteDC(mdc);
ReleaseDC(hWnd,hdc);
}

...全文
268 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
howard 2006-03-14
  • 打赏
  • 举报
回复
http://community.csdn.net/Expert/topic/4611/4611830.xml?temp=8.375186E-02
麻烦帮我看看这个问题好么很急,谢谢了!
菜牛 2006-01-30
  • 打赏
  • 举报
回复
老大,BeginPaint/EndPaint是加在WM_PAINT消息中的,从而获得DC。
ivan121282 2006-01-29
  • 打赏
  • 举报
回复
我己经加上selectobject() 和 BeginPaint()/EndPaint()了,可是问题仍在
void myPaint()
{
HDC hdc , mdc;
HBITMAP bmp;
hdc = GetDC(hWnd);
mdc = CreateCompatibleDC(hdc);

BeginPaint(hWnd , NULL);
SelectObject(mdc , pic1);
BitBlt(hdc,0 , 0 , width , height , mdc , 0 , 0 ,SRCCOPY);
bmp = (HBITMAP)SelectObject(mdc,pic2);
TransparentBlt2(hdc, 0, 0, width, height, mdc, 0, 0, width,height,
RGB (0x00,0x00,0x00));

SelectObject(mdc , bmp);
//SelectObject(hdc , bmp);
EndPaint(hWnd , NULL);

//DeleteObject(bmp);
DeleteDC(mdc);
ReleaseDC(hWnd,hdc);
菜牛 2006-01-29
  • 打赏
  • 举报
回复
画面闪不是这里的问题,可能是在WM_PAINT中没有调用BeginPaint()/EndPaint()。

不过
TransparentBlt(hdc, 0, 0, width, height, mdc, 0, 0, width, height,
RGB(0x00,0x00,0x00));
SelectObject(oldImage); //这里oldImage不是要删除,而是要选回
//DeleteObject(oldImage);

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧