小弟在一个 dialog的DoModal 中写了如下代码:
if(dlg.DoModal()==IDOK)
{
temp = 1;       // while temp == 1, paint 
                                  // the view....... otherwise do nothing
Invalidate();
}
主要就是要看到底这个WM_PAINT是什么什么时候给发送的,用SPY观察发现: 如果在对话框产生后,不移动对话框直接按OK键,则根本不会发送出WM_PAINT ; 如果移动了对话框则回发出. 有谁能解释么?真的是怪啊,在下拉菜单时, 明摆着视图给遮去了一部分了啊,可为什么也不发送WM_PAINT 呢? 怪.....想听听大家的看法......谢谢!

解决方案 »

  1.   

    不奇怪啊
    对话框一切的运作都在dlg.domodal()里进行了,直到对话框消失为止。
    当你按下了ok,对话框已经不存在了,你在theApp里面Invalidate()是怎么回事呢?我试了一下,根本就是报错。
      

  2.   

    你看一下深入浅出MFC就知道了
      

  3.   

    Yes
    when "dlg.DoModal()==IDOK"
    the dialog window has been destroyed ,namely dlg.GetSafeHwnd()=NULL
    however the CDialog object has not been delete.But MFC check the window
    handle's validity before it draws when calling OnPaint().
    So you call Invalidate() to draw the window would cause a assert by 
    MFC!