创建过程:
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版本 ,有的操作系统,对话框缩小在任务栏,不能显示出来.
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版本 ,有的操作系统,对话框缩小在任务栏,不能显示出来.
{
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版本却是正常的值.
我定义了一个保存窗口大小的CPoint m_OriginSize;
结果在OnInitDialog调用GetWindowRect来初始化它.本来是没事.
可是程序里面还有个OnGetMinMaxInfo设定窗口最小化的大小.
*** OnGetMinMaxInfo(***)
{
*** = m_OriginSize;
}
而这个OnGetMinMaxInfo 编译器调用是在对话框构造函数之后,OnInitDialog之前.
这就导致了OnInitDialog里面GetWindowRect 获取到的错误值.非常隐蔽的错误,调了好久.以后一定要记住要初始化变量.
这种问题,似乎一般是变量没有初始化和句柄无效引起的.