StretchBlt
时间:2011-12-27
来源:互联网
void XCMagnifier::XOwnerDraw()
{
CDC *pDC = GetDC();
if (pDC && m_pMemDC)
{
CRect clientRect;
CRect windowRect;
GetClientRect(clientRect);
GetWindowRect(windowRect);
if (!m_zoom)//正常显示
{
pDC->BitBlt(
clientRect.left, clientRect.top, clientRect.Width(), clientRect.Height(),
m_pMemDC,
windowRect.left, windowRect.top, SRCCOPY
);
}
else//放大镜
{
int cx, cy, cw, ch;
cx = clientRect.left;
cy = clientRect.top;
cw = clientRect.Width();
ch = clientRect.Height();
int wx, wy, ww, wh;
wx = windowRect.left;
wy = windowRect.top;
ww = windowRect.Width();
wh = windowRect.Height();
if (wx < 0)
{
ww += wx;
cx = wx*(-1);
cw += wx;
wx *= -1;
}
if (wy < 0)
{
wh += wy;
cy = wy*(-1);
ch += wy;
wy *= -1;
}
StretchBlt(
pDC->m_hDC, cx, cy, cw, ch,
m_pMemDC->m_hDC, wx, wy, ww/2, wh/2,
SRCCOPY
);
}
//draw rect border
pDC->MoveTo(clientRect.left, clientRect.top);
pDC->LineTo(clientRect.right - 1, clientRect.top);
pDC->LineTo(clientRect.right - 1, clientRect.bottom - 1);
pDC->LineTo(clientRect.left, clientRect.bottom - 1);
pDC->LineTo(clientRect.left, clientRect.top);
}
}
这个放大镜不能够实现放大的效果,放大镜移上去没得什么变化,是哪儿的问题?
{
CDC *pDC = GetDC();
if (pDC && m_pMemDC)
{
CRect clientRect;
CRect windowRect;
GetClientRect(clientRect);
GetWindowRect(windowRect);
if (!m_zoom)//正常显示
{
pDC->BitBlt(
clientRect.left, clientRect.top, clientRect.Width(), clientRect.Height(),
m_pMemDC,
windowRect.left, windowRect.top, SRCCOPY
);
}
else//放大镜
{
int cx, cy, cw, ch;
cx = clientRect.left;
cy = clientRect.top;
cw = clientRect.Width();
ch = clientRect.Height();
int wx, wy, ww, wh;
wx = windowRect.left;
wy = windowRect.top;
ww = windowRect.Width();
wh = windowRect.Height();
if (wx < 0)
{
ww += wx;
cx = wx*(-1);
cw += wx;
wx *= -1;
}
if (wy < 0)
{
wh += wy;
cy = wy*(-1);
ch += wy;
wy *= -1;
}
StretchBlt(
pDC->m_hDC, cx, cy, cw, ch,
m_pMemDC->m_hDC, wx, wy, ww/2, wh/2,
SRCCOPY
);
}
//draw rect border
pDC->MoveTo(clientRect.left, clientRect.top);
pDC->LineTo(clientRect.right - 1, clientRect.top);
pDC->LineTo(clientRect.right - 1, clientRect.bottom - 1);
pDC->LineTo(clientRect.left, clientRect.bottom - 1);
pDC->LineTo(clientRect.left, clientRect.top);
}
}
这个放大镜不能够实现放大的效果,放大镜移上去没得什么变化,是哪儿的问题?
作者: dengniit 发布时间: 2011-12-27
你取WindowRect的时候有我问题
作者: macrojj 发布时间: 2011-12-27
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28