大虾们救救我吧:我在修改一个软件,是Unicode工程的。
弹出一个模式对话框代码:
CXXXDlg dlg;
dlg.DoModal();
或者弹出一个系统对话框,如打开文件:
CFileDialog dlg(true, _T("mdb"), filePath+fileName, OFN_HIDEREADONLY, lpszFilter);
if((dlg.DoModal())==IDOK) 
{
// ……
}
程序一开始运行时对话框显示正常,但只要拖动它,就变成面目全非了:
 
关掉这个对话框,再打开,拖动,又正常了。后来发现,只要软件有一个窗口刷新过(如拖动、最大化最小化),就不会出现这种情况。即使出现这种情况,只要在任务栏暂时切换其它程序,再切换过来就显示正常。这个工程的全部模态对话框都这样,但非模态则正常。观看其它代码,没有发现不对的地方(代码太多也没看完)。主窗口打开前创建了好几个非模态对话框,而且用了MoveWindow函数,但这也应该没有问题啊。这个问题都弄得我快发疯了!网上不断地搜索,不断地翻阅MSDN,就是不知道问题在哪里。各位高手有没有遇到相似的问题啊,或者提供一种解决办法,先谢了。

解决方案 »

  1.   

    拖动窗口就是要重绘了,确定你的绘制代码是在ONPAINT()中?
      

  2.   

    你要设置好 你关于重绘的代码`~~`你看看 OnDraw那里面的代码是怎样做的拖动窗口 对话框发生重绘是一定的
      

  3.   

    虽然拖动一定会重绘,但一般处理WM_PAINT消息是在空闲处理时.所以要加Invalidate()强制窗体重绘
      

  4.   

    你会不会把代码写在了OnDraw函数里面了啊??
      

  5.   

    我的程序没有任何绘制代码,全部用标准的控件。比如CFileDialog,是MFC自带的,但DoModal()后仍会乱七八糟。