请教一个关于OnPaint()中绘图的问题.

losemaple 2007-04-03 09:22:53
void CMapEditorDlg::OnPaint()
{
if (IsIconic())
{
...
}
else
{
CRect rect;
m_EditMap->GetClientRect(&rect);
CPaintDC dc(GetDlgItem(IDC_MAP)); // device context for painting
CDC MemDC;
MemDC.CreateCompatibleDC(NULL);
MemDC.FillRect(&rect,&m_Bk);
// gameMap.DrawMap(&MemDC.m_hDC,0,0,rect.Width(),rect.Height());
MemDC.TextOut(100,100,"zzzz",4);
dc.BitBlt(0,0,rect.Width(),rect.Height(),&MemDC,0,0,SRCCOPY);
DeleteDC(MemDC);
CDialog::OnPaint();
}
}

OnPaint()函数体如上,IDC_MAP为一个STATIC控件,我要在这个控件上绘图,想先在内存DC MemDC中把图形画好,然后直接贴到dc上,可是运行后却什么都没画出来.
被注释的一个函数gameMap.DrawMap(...);是我定义的一个类函数,用来在指定的HDC上绘位图,把它的注释去掉发现它却可以正常显示.把MemDC.FillRect(&rect,&m_Bk);
中的MemDC改为dc发现也可以正常绘制...请问这到底是什么原因?
是因为我没有指定MemDC的什么信息么??
本人初学MFC希望高手指教!!!!!
...全文
171 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
losemaple 2007-04-04
  • 打赏
  • 举报
回复
4楼太感谢了!!分数不多,希望笑纳,同时也十分感谢1楼和3楼的朋友!!!
coldplay968 2007-04-04
  • 打赏
  • 举报
回复
CPaintDC dc1(this); // device context for painting
 dcMemory.CreateCompatibleDC(&dc1);
 CBitmap bmp;//这里的Bitmap是必须的,否则当心弄出一个大黑块哦。
 bmp.CreateCompatibleBitmap(&dc1,rectClient.Width(),rectClient.Height());
 dcMemory.SelectObject(&bmp);

 //接下来你想怎么画就怎么画吧。
 //dcMemory.FillRect(rectClient,&brush);

 dc1.BitBlt(0,0,rectClient.Width(),rectClient.Height(),&dcMemory,0,0,SRCCOPY);
 dcMemory.DeleteDC();
菜牛 2007-04-03
  • 打赏
  • 举报
回复
CDialog::OnPaint();
注释掉或放到前面

MemDC需要选进去一个兼容位图。
losemaple 2007-04-03
  • 打赏
  • 举报
回复
楼上的请说的具体点?怎么实现??
rommi 2007-04-03
  • 打赏
  • 举报
回复
dc.CreateCompatibleDC(&MemDC);

15,979

社区成员

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

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