CRect rectClient;
CRect rectTrackDlg;
GetClientRect(&rectClient);
ClientToScreen(rectClient);//转换为屏幕坐标
dlg.GetWindowRect(rectTrackDlg);//对话框宽高度
    dlg.SetWindowPos(NULL,rectClient.right-rectTrackDlg.right,rectClient.bottom-rectTrackDlg.bottom,0,0,SWP_NOSIZE );//将对话框防止在屏幕左下角

if (Flag)
{
Flag=dlg.ShowWindow(SW_HIDE);
}
else
Flag=dlg.ShowWindow(SW_SHOW);如上所示代码是使对话框显示或消失的响应函数,但是,响应结果不正确,对话框连续出现了两次,连续消失两次,showwindow的返回值严重不对,在0和24之间切换。这是为什么呀?我在前面OnCreate函数中已经建立了非模态对话框,只是处于隐藏状态。

解决方案 »

  1.   

    返回的是BOOL值  你管他是24还是1  只有0和非0的区别  窗口当前可见,则返回值为非0。当前被隐藏,返回值为0
      

  2.   

    我调试的时候发现,这一句
    dlg.GetWindowRect(rectTrackDlg);
    获取的对话框宽度和高度会变,晕,这就是为什么对话框显示的时候位置会动的原因。但是为什么会变呀????
    指点一下吧。
      

  3.   

    上边一个问题知道为什么了。晕,不是宽高度变化,而是对话框位置变了。下边这一句写的不对
    dlg.SetWindowPos(NULL,rectClient.right-rectTrackDlg.right,rectClient.bottom-rectTrackDlg.bottom,0,0)
    应该减去对话框宽度和高度,而不是减去坐标。晕。
      

  4.   

    靠,明白了,showwindow的返回值是这样定义的:如果窗口以前可见,则返回值为非零。如果窗口以前被隐藏,则返回值为零。我刚开始理解为当前窗口了。晕。