MFC双缓存绘图设置映射模式(MM_HIMETRIC),怎么使创建的位图铺满整个绘图区

Leo_PJH 2015-04-12 10:51:53
MFC单文档程序,使用双缓存技术绘图,需要把逻辑单位转成毫米,采用MM_HIMETRIC模式,问生成的位图怎么铺满整个绘图区?
代码如下:
CDC dcMem;
CBitmap bm;
CPen pen(PS_SOLID, 0, RGB(255, 0, 10));
pDC->SetMapMode(MM_HIMETRIC);

CRect rc;
GetClientRect(&rc);
int w = abs(rc.right - rc.left);
int h = abs(rc.bottom - rc.top);

pDC->SetViewportOrg(w/2, h/2);

dcMem.CreateCompatibleDC(GetDC());//创建兼容DC
bm.CreateCompatibleBitmap(pDC, rc.Width(), rc.Height());//创建兼容bmp,注意用pDC
dcMem.SelectObject(&bm);
dcMem.SelectObject(&pen);
dcMem.SetViewportOrg(w / 2, h / 2);
dcMem.SetMapMode(MM_HIMETRIC);

dcMem.MoveTo(0, 0);
dcMem.LineTo(50, 50);

pDC->BitBlt(0, 0, rc.Width(), rc.Height(), &dcMem, 0, 0, SRCCOPY);
...全文
302 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
com_monkey 2017-07-13
  • 打赏
  • 举报
回复
求楼主分享如何解决的
cppabc 2016-02-20
  • 打赏
  • 举报
回复
引用 2 楼 qwert65185606 的回复:
[quote=引用 1 楼 zgl7903 的回复:] 贴图 BitBlt 之前回复坐标原始点和映射模式
谢谢,已经解决![/quote] 楼主,麻烦说下怎么解决的,谢了
cppabc 2016-02-20
  • 打赏
  • 举报
回复
引用 1 楼 zgl7903 的回复:
贴图 BitBlt 之前回复坐标原始点和映射模式
请问为什么要这样做呢,能说下吗,我现在也遇到这个问题急需解决,问题如下: 我想在MFC中应用双缓存技术来消除闪烁,代码如下(为了测试,先只画了一条直线): void CDblBufTestView::OnDraw(CDC* pDC) { CDC dcMem; dcMem.CreateCompatibleDC(pDC); //创建与视图的设备相兼容的内存设备 CBitmap bmp; bmp.CreateCompatibleBitmap(pDC,rect.right,rect.bottom); //创建一个与视图兼容的位图 CBitmap* pOldBmp=dcMem.SelectObject(&bmp); dcMem.FillSolidRect(0,0,3000,2000,WHITE); dcMem.MoveTo(20,20); dcMem.LineTo(40,100); dcMem.LineTo(50,200); dcMem.LineTo(200,500); pDC->BitBlt(0,0,rect.Width(),rect.Height(),&dcMem,0,0,SRCCOPY); dcMem.SelectObject(pOldBmp); dcMem.DeleteDC(); } 其中,为了窗口有滚动条,CDblBufTestView的基类设为了CScrollView 为设置滚动条,重写了OnInitialUpdate,如下 void CDblBufTestView::OnInitialUpdate() { CSize siz(2000,10000); SetScrollSizes(MM_LOENGLISH,siz); SetTimer(TIME1,10,NULL); } 运行后不显示在OnDraw中画的直线,查看之后发现是坐标系的问题,将OnInitialUpdate函数中的MM_LOENGLISH修改为MM_TEXT即可显示出直线。 但是我想应用MM_LOENGLISH,请问应该怎么修改,才能正常显示?(我尝试过修改画直线的坐标为 dcMem.MoveTo(20,-20); dcMem.LineTo(40,-100); dcMem.LineTo(50,-200); dcMem.LineTo(200,-500); 但是还是不能显示。)
Leo_PJH 2015-04-13
  • 打赏
  • 举报
回复
引用 1 楼 zgl7903 的回复:
贴图 BitBlt 之前回复坐标原始点和映射模式
谢谢,已经解决!
zgl7903 2015-04-12
  • 打赏
  • 举报
回复
贴图 BitBlt 之前回复坐标原始点和映射模式

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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