偶建的基于MDI的项目,想在CMainFrame 中重载OnPaint()来画一个线框,并用CBrush
来填充颜色,如下:
void CMainFrame::OnPaint() 
{
    CDC dc;
    CBrush size;
    dc.m_hDC=::GetDC(this->m_hWndMDIClient); 
    CBrush br(RGB(166,202,240));//256色刷子//天蓝色
    dc.SelectObject(&br);
    dc.Rectangle(CRect(20, 20, 256, 192));//1屏幕
    dc.Rectangle(CRect(257, 20, 493, 192));//2屏幕
UpdateWindow();///
    ReleaseDC(&dc);
可是运行时刷新有问题,请教各位大哥   在线等

解决方案 »

  1.   

    应该是在WM_NCPAINT里面绘图吧?!
      

  2.   

    各位大哥,小弟刚工作不到半年,VC也用的不久,可能有地方没说明白,多包涵 WM_NCPAINT消息
    为什么CMainFrame类里没有,CWnd 的类到是有,前者不是后者派生的吗,为什么会没有这个消息呢? 我说的刷新有问题是说,我自绘的线框使得主框架的背景不能及时刷新背景色,有明显的滞后感,另外如何使我自绘的线框随主框架的缩放能够随之安比例缩放请教各位大虾,小弟很急!   多谢多谢!!!
      

  3.   

    在classwizard对话框的最后一页,设置message filter
    WM_NCPAINT消息CMainFrame类有的,不显示只是vc只显示了CFrameWnd类的消息,这样可以少显示一点
      

  4.   

    自绘看看这里的例子http://www.vckbase.com/code/listcode.asp?mclsid=5&sclsid=510&page=5
      

  5.   

    请问WM_NCPAINT 和 WM_PAINT 有什么本质的区别吗?我把代码换到void CMainFrame::OnNcPaint()下还是老问题
    另外如何使我自绘的线框随主框架的缩放能够随之按比例缩放
    郁闷ing !!!
      

  6.   

    怎么能够在移动子窗体的同时刷新主框架的客户区,即MDICLIENT区域呢???
    小弟在MDICLIENT区域内绘了个矩形框,并用CBrush上色,当打开子窗体的时候,想移动子窗体的时候会将自绘的框体盖住,不能刷新,请教各位?
      

  7.   

    也要用CPaintDC,要不然无效时怎么处理。
    WM_PAINT和WM_NCPAINT一起处理应该可以解决。
    缩放:在处理消息时GetWindowRect、GetClientRect。
    两者区别:客户区和非客户区无效的消息