创建过程:
m_dlgStartup.Create(IDD_DIALOG_STARTUP, GetDesktopWindow());
m_dlgStartup.ShowWindow(SW_SHOWNORMAL);菜单响应里面的.
void CNetProtectorUIDlg::OnMenuShowStartup()
{
   if (theGlobalVar::instance()->m_bStartupShow)
  {
    //判断程序是否已经最小化了,如果是最小化,则恢复显示
if (m_dlgStartup.IsIconic())
{
m_dlgStartup.ShowWindow(SW_SHOWNORMAL);
}
else
{
m_dlgStartup.ShowWindow(SW_HIDE);
theGlobalVar::instance()->m_bStartupShow  = !theGlobalVar::instance()->m_bStartupShow ;
}
    }
   else
    { 
m_dlgStartup.ShowWindow(SW_SHOWNORMAL);
theGlobalVar::instance()->m_bStartup
         Show  = !theGlobalVar::instance()->m_bStartupShow ;
     }
}Debug版本 下,ShowWindow正常,但Release版本 ,有的操作系统,对话框缩小在任务栏,不能显示出来.

解决方案 »

  1.   

    用GetWindowsRect获取到的值超过界面.
      

  2.   

    用GetWindowsRect获取到的值超过界面.
      

  3.   

    我以前出现类似情况都是因为变量没有初始化。Debug模式下,变量初值为0,而Release模式下,变量初值非0。LZ不妨查下看。
      

  4.   

    CStartDlg在OnInitDilog里面调用MoveToBottom void MoveToBottom()
    {
       int DeskCX = GetSystemMetric();
        int DeskCY = GetSystemMeTric();
       CRect rect(0,0,0,0);
       GetWindowsRect(&rect);
        int x = DeskCx - rect.width();
        int y = DeskCy - rect.height();
      SetWindowPos(...,x,y,,,,);
    } 发现 GetWindowsRect(&rect);
    在Release版本下面获取到
    left =-300 top = -433 right =13434 bottom = 34343
    用DebugView 得到的.
    但很奇怪  Debug版本却是正常的值.
      

  5.   

    我也遇到过一次,当时动态创建的类,在NEW的时候就开始Create对话框,就会出现这种问题,后来改成,第一次显示的时候再创建对话框就可以了。
      

  6.   

    我也遇到过一次,当时动态创建的类,在NEW的时候就开始Create对话框,就会出现这种问题,后来改成,第一次显示的时候再创建对话框就可以了。能详细介绍吗?
      

  7.   

    问题解决了.是对话框成员变量初始化的问题.
    我定义了一个保存窗口大小的CPoint m_OriginSize;
    结果在OnInitDialog调用GetWindowRect来初始化它.本来是没事.
    可是程序里面还有个OnGetMinMaxInfo设定窗口最小化的大小.
    *** OnGetMinMaxInfo(***)
    {
     *** = m_OriginSize;
    }
    而这个OnGetMinMaxInfo  编译器调用是在对话框构造函数之后,OnInitDialog之前.
    这就导致了OnInitDialog里面GetWindowRect 获取到的错误值.非常隐蔽的错误,调了好久.以后一定要记住要初始化变量.
    这种问题,似乎一般是变量没有初始化和句柄无效引起的.