我知道在客户区失效的时候系统会发出一个WM_PAINT的消息到消息循环里
我不知道在程序刚启动的时候先调用这两个函数里的哪个
我不知道这两个函数是不是有联系
我想知道如果画图函数没有在OnDraw里,怎么在OnPaint函数里加代码使客户区重画
我自己想了个方法是在OnDraw里用了好多的bool变量来判断该重画哪些图形,是不是太笨了?我看书上说系统保留了无效矩形的数据结构,但是不知道怎么恢复。
我问的主要问题是应该怎么处理重画呢?有没有自动的方法。
谢谢!

解决方案 »

  1.   

    OnPaint 调用OnDraw()void CView::OnPaint()
    {
      CPaintDC dc(this);
      OnPrepareDC(this);
      OnDraw();
    }
    OnDraw() 是公共性的绘图操作包括输出到屏幕和打印机打印时也由CView::OnPrint()调用OnDraw()
      

  2.   

    void CView::OnPaint()
    {
      CPaintDC dc(this);
      OnPrepareDC(this);
      OnDraw();
    }
      

  3.   

    我不知道在程序刚启动的时候先调用这两个函数里的哪个
    : 系统发 WM_PAINT 消息,即调用OnPaint函数我不知道这两个函数是不是有联系
    :OnDraw是公共的绘制函数,他既用于界面绘制,也用于打印绘制我想知道如果画图函数没有在OnDraw里,怎么在OnPaint函数里加代码使客户区重画

      CPaintDC dc(this);
      OnPrepareDC(this);
      OnDraw();我自己想了个方法是在OnDraw里用了好多的bool变量来判断该重画哪些图形,是不是太笨了?我看书上说系统保留了无效矩形的数据结构,但是不知道怎么恢复。
    :不必了,CPaintDC的析构函数会自动恢复。 否则调用API EndPaint 来恢复我问的主要问题是应该怎么处理重画呢?有没有自动的方法。
    :不过载OnPaint,代码加在OnPaint中,否则加在OnDraw中