有高手指导一下 CMemDC 函数用法

bigbat 2018-01-29 06:17:06
void Learn1View::OnDraw(CDC* pDC)
{
HDC hdcMemDC = NULL;
CGDILearn1Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;

// TODO: 在此处为本机数据添加绘制代码
CMemDC dcMem(*pDC, this);
CDC& dc = dcMem.GetDC();

CRect rect;
GetClientRect(rect);

dc.FillSolidRect(rect, GetSysColor(COLOR_WINDOW));

CString strRGB;
strRGB.Format(_T("Fill Color is: %d;"),"2000");

dc.DrawText(strRGB, rect, DT_CENTER);
rect.top += 25;

}
看以上代码,其中的CMemDC 函数得到的是一个内存DC句柄,按道理我没有要求内存句柄dc绘到pDC上的话,是显示不出来的,可是程序运行后是可以显示文字的,有懂的朋友指导一下。
...全文
378 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
worldy 2018-01-30
  • 打赏
  • 举报
回复
CMemDC在释构函数里会将内存dcBitBlt到传入的的dc
bigbat 2018-01-30
  • 打赏
  • 举报
回复
谢谢,各位:我也猜到了是在析构时来处理重绘的问题,但是这样设计有些没有底。多亏了是ms的样例代码,才由此一问。
zgl7903 2018-01-30
  • 打赏
  • 举报
回复
CMemDC的设计的绝妙之处在于巧妙的利用的C++函数的构析特性, 它的BitBlt是在解析~CMemDC函数中完成的, 可以在VS下的afxglobals.cpp下看到其源码, 当然这也限制了其使用的作用域范围
走好每一步 2018-01-29
  • 打赏
  • 举报
回复
CMemDC 跟dc用法差不多,不知道你是不是用VS自带的,感觉VS自带的没有外面封的那个好用
schlafenhamster 2018-01-29
  • 打赏
  • 举报
回复
不要 CMemDC(CDC& dc, CWnd* pWnd); 使用 CMemDC(CDC& dc);// 试试

19,468

社区成员

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

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