c++ 使用TransparentBlt后为什么图片被放大了?要怎么修改?

BOOLCChildView::PreCreateWindow(CREATESTRUCT&cs){if(!CWnd::PreCreateWindow(cs))return... BOOL CChildView::PreCreateWindow(CREATESTRUCT& cs)
{
if (!CWnd::PreCreateWindow(cs))
return FALSE;
cs.dwExStyle |= WS_EX_CLIENTEDGE;
cs.style &= ~WS_BORDER;
cs.lpszClass = AfxRegisterWndClass(CS_HREDRAW|CS_VREDRAW|CS_DBLCLKS,
::LoadCursor(NULL, IDC_ARROW), reinterpret_cast<HBRUSH>(COLOR_WINDOW+1), NULL);
m_bgCdc.CreateCompatibleDC(NULL);
//载入背景位图
m_bgCbitmap.LoadBitmap(IDB_BITMAP1);
m_bgCdc.SelectObject(&m_bgCbitmap);
//获取背景位图信息,如宽高为了拉伸图片
m_bgCbitmap.GetBitmap(&m_bgBitmap);
m_gridCdc.CreateCompatibleDC(NULL);
//载入钩子位图
m_gridCbitmap.LoadBitmap(IDB_BITMAP2);
m_gridCdc.SelectObject(&m_gridCbitmap);
//hook区域初始化,hook的分辨率为60*60
m_hookCRt.left = 20;
m_hookCRt.right = 20+39;
m_hookCRt.top = 20;
m_hookCRt.bottom = 20+39;
return TRUE;
}
void CChildView::OnPaint()
{
CDC* cDc = this->GetDC();
//获取绘图区域矩形
GetClientRect(&m_clientCRt);
//缓冲设备上下文初始化
m_cacheCdc.CreateCompatibleDC(NULL);
m_cacheCbitmap.CreateCompatibleBitmap(cDc,m_clientCRt.Width(),m_clientCRt.Height());
m_cacheCdc.SelectObject(&m_cacheCbitmap);
//可拉伸绘制背景位图
m_cacheCdc.StretchBlt(0,0,m_clientCRt.Width(),m_clientCRt.Height(),&m_bgCdc,0,0,m_bgBitmap.bmWidth,m_bgBitmap.bmHeight,SRCCOPY);
//获取DC句柄
HDC cacheHdc = m_cacheCdc.m_hDC;
HDC hookHdc = m_gridCdc.m_hDC;
//将透明位图与背景一起显示出来
//这里///////////////////////////////////////////////////////////////////////////////////////////////////////////////
TransparentBlt(cacheHdc, 0, 0, m_bgBitmap.bmWidth,m_bgBitmap.bmHeight,
hookHdc, 0, 0, m_hookCRt.Width(),m_hookCRt.Height(),
RGB(255,255,255));
//这里///////////////////////////////////////////////////////////////////////////////////////////////////////////////
cDc->BitBlt(0,0,m_clientCRt.Width(),m_clientCRt.Height(),&m_cacheCdc,0,0,SRCCOPY);
m_cacheCdc.DeleteDC();
m_cacheCbitmap.DeleteObject();
ValidateRect(&m_clientCRt);
}
展开
 我来答
乜天沅22
2012-09-13 · 超过21用户采纳过TA的回答
知道答主
回答量:55
采纳率:0%
帮助的人:37.8万
展开全部
TransparentBlt(cacheHdc, 0, 0, m_bgBitmap.bmWidth,m_bgBitmap.bmHeight,
hookHdc, 0, 0, m_hookCRt.Width(),m_hookCRt.Height(), RGB(255,255,255));
TransparentBlt函数参数的作用:
第1个参数,是资源的位图句柄;
第2、3个参数,资源图片的起始坐标的x,y值;
第4、5个参数,资源图片的宽、高值;
第6个参数,你要画到哪里的目的位图句柄;
第7、8个参数,画到目的位图句柄的起始坐标x,y值;
第9、10个参数,画到目的位图句柄的宽、高值;
第11个参数,应该是要过滤掉的颜色(太久没用这函数,不太确定)。
所以如果你画的图被放大了,那就是第4、5与第9、10参数的值不相等所导致的。4与9要相等,5与10要相等。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式