alphablend函数那里使用错了????

mirroatl204 2013-01-31 03:55:20

else
{
CBitmap mMapGND;
mMapGND.LoadBitmap(IDB_BITMAP1);

BITMAP bmMapGND;
GetObject((HBITMAP)mMapGND,sizeof(BITMAP),(PSTR)&bmMapGND);
BLENDFUNCTION blend;
memset( &blend, 0, sizeof( blend) );
blend.BlendOp= AC_SRC_OVER;
blend.SourceConstantAlpha = 210;
HDC bitmapFORGND_Hdc = CreateCompatibleDC(NULL);
HBITMAP hOldBitmapFORGND = (HBITMAP)SelectObject(bitmapFORGND_Hdc,(HBITMAP)mMapGND);
CDC* pFORGND = CDC::FromHandle(bitmapFORGND_Hdc);
dc.AlphaBlend(0,0,400,400,pFORGND,0,0,bmMapGND.bmWidth,bmMapGND.bmHeight, blend);
SelectObject(pFORGND->m_hDC,hOldBitmapFORGND);
//CDialog::OnPaint();
}

...全文
564 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
傻X 2013-02-09
  • 打赏
  • 举报
回复
这效果不是贼明显么?
mirro187_ 2013-02-08
  • 打赏
  • 举报
回复

第一次显示是这个样子的,能看见对话框底下编译器的代码。但是,为啥移动对话框,对话框底下编译器代码会在对话框上呢???而且,看不见移动后,对话框底下是什么。
引用 6 楼 tiger9991 的回复:
看看这个:

如果源矩形区域与目标矩形区域大小不一样,那么将缩放源位图与目标矩形区域匹配。如果使用SetStretchBltMode函数,那么iStretchMode的值是BLACKONWHITE和WHITEONBLACK,在本函数中,iStretchMode的值自动转换成COLORONCOLOR。目标坐标使用为目标设备环境当前指定的转换方式进行转换。源坐标则使用为源设备环境指定的当前转换方式……
mirroatl215 2013-02-08
  • 打赏
  • 举报
回复
//没效果哦


BOOL CtranslucenceFrameDlg::OnEraseBkgnd(CDC* pDC)
{
	// TODO: 在此添加消息处理程序代码和/或调用默认值
	BLENDFUNCTION blend;         
	memset( &blend, 0, sizeof( blend) );         
	blend.BlendOp= AC_SRC_OVER;         
	blend.SourceConstantAlpha = 210; 
	
	CRect rect;
	GetClientRect(rect);
	HDC hMemDC = ::CreateCompatibleDC(NULL);
	HBITMAP hMemBitmap = ::CreateCompatibleBitmap(::GetDC(NULL),rect.Width(),rect.Height());
	HBITMAP old = (HBITMAP)SelectObject(hMemDC,hMemBitmap);
	CDC* pFOR = CDC::FromHandle(hMemDC);
	pFOR->FillSolidRect(rect,RGB(255,0,255));
	//pDC->BitBlt(0,0,rect.Width(),rect.Height(),pFOR,0,0,SRCCOPY);
	pDC->AlphaBlend(0,0,rect.Width(),rect.Height(),pFOR,0,0,rect.Width(),rect.Height(),blend);
	SelectObject(hMemDC,old);
	return 1;//CDialog::OnEraseBkgnd(pDC);
}

引用 6 楼 tiger9991 的回复:
看看这个: 如果源矩形区域与目标矩形区域大小不一样,那么将缩放源位图与目标矩形区域匹配。如果使用SetStretchBltMode函数,那么iStretchMode的值是BLACKONWHITE和WHITEONBLACK,在本函数中,iStretchMode的值自动转换成COLORONCOLOR。目标坐标使用为目标设备环境当前指定的转换方式进行转换。源坐标则使用为源设备环境指定的当前转换方式……
傻X 2013-02-04
  • 打赏
  • 举报
回复
看看这个: 如果源矩形区域与目标矩形区域大小不一样,那么将缩放源位图与目标矩形区域匹配。如果使用SetStretchBltMode函数,那么iStretchMode的值是BLACKONWHITE和WHITEONBLACK,在本函数中,iStretchMode的值自动转换成COLORONCOLOR。目标坐标使用为目标设备环境当前指定的转换方式进行转换。源坐标则使用为源设备环境指定的当前转换方式进行转换。如果源设备环境标识为增强型图元文件设备环境,那么会出错(并且该函数返回FALSE)。如果目标和源位图的色彩格式不同,那么AlphaBlend将源位图转换以匹配目标位图。 AlphaBlend不支持镜像。如果源或目标区域的宽度或高度为负数,那么调用将失败。 注意添加 #pragma comment(lib,"Msimg32.lib")库 bf.BlendOp = AC_SRC_OVER; bf.BlendFlags = 0; bf.AlphaFormat = 0; bf.SourceConstantAlpha = 50; //TBlendFunction 结构是 _BLENDFUNCTION 的重命名: _BLENDFUNCTION = packed record BlendOp: BYTE; {本例使用了: AC_SRC_OVER = 0} BlendFlags: BYTE; {必须为 0} SourceConstantAlpha: BYTE; {透明度: 0..255} AlphaFormat: BYTE; {通常为 0,如果源位图为32位真彩色,可为 AC_SRC_ALPHA }
jimette 2013-02-04
  • 打赏
  • 举报
回复
getlasterror 看看!
mirroatl205 2013-02-04
  • 打赏
  • 举报
回复
到底哪里错了
mirroatl204 2013-02-02
  • 打赏
  • 举报
回复
晕 没有人用过吗?????????????
mirroatl204 2013-02-01
  • 打赏
  • 举报
回复
alpha通道 是咋回事呀 与alphaBlend函数有关系吗

15,978

社区成员

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

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