我建了个对话框,
在其OnPaint()函数中,
我这样:
{  ...
  CDialog::OnPaint();  CPaintDC dc( this );
  dc.TextOut(10, 10, _T("你好,世界!") );
}
但是根本就没显示那些文字,我把CDialog::OnPaint()语句移
到最后一行就行了,为什么呢?我认为CDialog::OnPiant()这个
语句如果放到最后一行就把那些要显示的文字又给抹掉了,所以
CDialog::OnPiant()应该放在dc.TextOut语句前面,可我怎么错
了呢?请大家指正.急啊...

解决方案 »

  1.   

    CDialog::OnPaint()会调用BeginPaint(),而BeginPaint()的调用会提示系统删掉消息列队中的WM_PAINT消息,最终导致CPaintDC失效,所以画不出东西
      

  2.   

    to  i_noname(晚九朝五) :
    那CDialog::OnPaint();语句移到最后一行为什么就行呢?
    按你的解释也是不正确的啊
      

  3.   

    CPaintDC是从WM_PAINT消息中获得无效区域的
    CDialog::OnPaint()并没有真的重画什么,只是调用BeginPaint和EndPaint,所以之前画的不会被抹掉。
      

  4.   

    CPaintDC只有一个实例的,谁先就谁画。
      

  5.   

    to nelsonc(软件兔) :
    没有啊 ,我只是把CDialog::OnPaint();移到最后
    一行就行了.
      

  6.   

    to dirdirdir3(风) :
    请问什么意思...我不太明白,
    按您的意思,那个CDialog::OnPaint()语句也没什么用了,
    那为什么很多程序到要加上这个语句呢?
      

  7.   

    你可以把CDialog::OnPaint()删掉,换上
    BeginPaint();
    EndPaint();
    一样效果