首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

MFC CFormView的控件上绘图的有关问题

2013-06-19 
MFC CFormView的控件上绘图的问题我在CFormView里面添加一个静态的控件,可以接受消息,在CFormView里面一个

MFC CFormView的控件上绘图的问题
我在CFormView里面添加一个静态的控件,可以接受消息,在CFormView里面一个函数中获得个控件的DC,在上面绘图,若直接绘制成功,但是每次让其控件恢复原来状态在绘制会被覆盖,即代码如下

CmyFromView::myDraw()
{
  CDC * pDC = m_staticPaint.GetDc;
  pDC->MoveTo(..,..);
  ...
}
若是先无效在重绘
CmyFromView::myDraw()
{
  m_staticPaint.RedrawWindow();
  CDC * pDC = m_staticPaint.GetDc;
  pDC->MoveTo(..,..);
  ...
}
会没有效果,不知道什么原因?
把myDraw放在在CFormView的OnPaint里面绘制也会覆盖,跟踪是发现此时控件还没有显示。我想知道MFC下何时所有的控件完成显示,我怎么添加我的代码让显示完所有控件后直接运行mydraw?
而且
CmyFromView::myDraw()
{
  if(!m_staticPaint.RedrawWindow())
    return;
  CDC * pDC = m_staticPaint.GetDc;
  pDC->MoveTo(..,..);
  ...
}
重绘就有效,这我又不懂了,它难道运行时没完成就运行下一步吗?
等高手!!!!!!
[解决办法]
可以用PostMessage,把mydraw处理放进消息队列之中。

这样可以保证窗体Draw完成再Draw你控件
[解决办法]
引用:
Quote: 引用:

没太看明白你什么意思
不过静态控件比较特殊
我个人不建议直接通过获取其dc直接绘图
那怎么弄呢,怎么就沉了!!!

反正是画图
可以直接画的View里
或者用自定义控件
可以参考http://blog.csdn.net/xianglitian/article/details/6075653
[解决办法]
看着有些别扭,怎么不重写CStatic类,在派生类的OnPaint函数中去绘制图形。
[解决办法]
ON_WM_CTLCOLOR()
afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor);

用这个消息响应函数试试

热点排行