双缓冲和SetMapMode结合使用时,改变坐标原点图像不完整了

com_monkey 2017-07-14 10:24:58
OnInitDialog加入了下面的代码:
// TODO: Add extra initialization here
CRect rect;
GetClientRect(&rect);
CDC *pDC = GetDC();
//内存DC和位图都是成员变量
m_dcMem.CreateCompatibleDC(pDC);
m_bmp.CreateCompatibleBitmap(pDC, rect.Width(), rect.Height());
m_dcMem.SelectObject(&m_bmp);

OnPaint()代码如下:
CRect rect;
GetClientRect(&rect);
CDC *pDC = GetDC();
//设置内存DC的映射模式
m_dcMem.SetMapMode(MM_ANISOTROPIC);
m_dcMem.SetWindowExt(rect.Width(), -rect.Height());
m_dcMem.SetViewportExt(rect.Width(), rect.Height());
m_dcMem.SetViewportOrg(rect.Width()/2, rect.Height()/2);

//画图,一个椭圆一条直线
CRect rectEllipse(-rect.Width()/2, -rect.Height()/2, rect.Width()/2, rect.Height()/2);
m_dcMem.Ellipse(&rectEllipse);

m_dcMem.MoveTo(-rect.Width()/2-40, -rect.Height()/2-10);
m_dcMem.LineTo(rect.Width(), rect.Height());

//客户区DC的映射模式
pDC->SetMapMode(MM_ANISOTROPIC);
pDC->SetWindowExt(rect.Width(), -rect.Height());
pDC->SetViewportExt(rect.Width(), rect.Height());
pDC->SetViewportOrg(rect.Width()/2, rect.Height()/2);


pDC->BitBlt(0, 0, rect.right, rect.bottom, &m_dcMem, 0, 0, SRCCOPY);


Invalidate(FALSE);
ReleaseDC(pDC);


运行结果如下:

为什么只有第一象限有图像,
...全文
271 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
com_monkey 2017-12-02
  • 打赏
  • 举报
回复
木有人呐,真尴尬

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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