单文档应用程序,启动时怎么自动隐藏,试了多种方法,每次都有闪动。多谢
单文档应用程序,启动时如何自动隐藏,试了多种方法,每次都有闪动。急!谢谢
单文档应用程序,启动时如何自动隐藏,试了多种方法,每次都有闪动。急!谢谢
:1.在InitInstance()屏蔽
//m_pMainWnd->ShowWindow(SW_SHOW);
//m_pMainWnd->UpdateWindow();并且加上AfxGetApp()->m_nCmdShow=SW_HIDE
2.在int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)加上
AfxGetApp()->m_nCmdShow=SW_HIDE;
ShowWindow(SW_HIDE);
3在void CMainFrame::ActivateFrame(int nCmdShow)加上
nCmdShow=SW_HIDE;
但是这些措施 都没用 窗口最终会隐藏 但是会闪动一下,请教高手如何才能不闪 十分感谢
------解决方案--------------------
参考:
http://www.xmsc.com.cn/InfoView/Article_99047.html
------解决方案--------------------
创建窗口时,屏蔽WS_VISIBLE样式
------解决方案--------------------
位置放的有问题,修改下:
m_nCmdShow = SW_HIDE;
if (!ProcessShellCommand(cmdInfo))
return FALSE;
// The one and only window has been initialized, so show and update it.
m_pMainWnd->ShowWindow(SW_HIDE);
m_pMainWnd->UpdateWindow();
------解决方案--------------------
在窗口的关闭事件(WM_CLOSE)中加入代码:
WINDOWPLACEMENT wp;
if(GetWindowPlacement(&wp))
{
if (IsZoomed())
wp.flage ¦= WPF_RESTORETOMAXIMIZED;
CString strBuffer;
strBuffer.Format("%i:%i:%i:%i:%i:%i:%i:%i:%i:%i",
wp.flags,wp.showCmd,
wp.ptMinPosition.x, wp.ptMinPosition.y,
wp.ptMaxPosition.x, wp.ptMaxPosition.y,
wp.rcNormalPosition.left , wp.rcNormalPosition.top,
wp.rcNormalPosition.right, wp.rcNormalPosition.bottom);
AfxGetApp()->WriteProfileString("Settings","WindowPos",strBuffer); //写入注册表
}
在InitInstance的最后(return之前)加入代码:
CString strBuffer=GetProfileString("Settings","WindowPos"); //从注册表读出数据
WINDOWPLACEMENT wp;
if(!strBuffer.IsEmpty())
{
int nRead=_stscanf(strBuffer,"%i:%i:%i:%i:%i:%i:%i:%i:%i:%i",
&wp.flags, &wp.showCmd,
&wp.ptMinPosition.x, &wp.ptMinPosition.y,
&wp.ptMaxPosition.x, &wp.ptMaxPosition.y,
&wp.rcNormalPosition.left , &wp.rcNormalPosition.top,
&wp.rcNormalPosition.right, &wp.rcNormalPosition.bottom);
if(cRead==10)
{
m_pMainWnd->SetWindowPlacement(&wp);
}
}
程序要运行两次以后才能看到结果,第一次是保存数据,第二次以后就能读出位置显示。
--- 这是保存状态的,你可以对应的反过来读取,不保存状态...
------解决方案--------------------
我是这样解决的。
单文档应用程序,启动时如何自动隐藏,试了多种方法,每次都有闪动。急!谢谢
:1.在InitInstance()屏蔽
//m_pMainWnd->ShowWindow(SW_SHOW);
//m_pMainWnd->UpdateWindow();并且加上AfxGetApp()->m_nCmdShow=SW_HIDE
2.在int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)加上
AfxGetApp()->m_nCmdShow=SW_HIDE;
ShowWindow(SW_HIDE);
3在void CMainFrame::ActivateFrame(int nCmdShow)加上
nCmdShow=SW_HIDE;
但是这些措施 都没用 窗口最终会隐藏 但是会闪动一下,请教高手如何才能不闪 十分感谢
------解决方案--------------------
参考:
http://www.xmsc.com.cn/InfoView/Article_99047.html
------解决方案--------------------
创建窗口时,屏蔽WS_VISIBLE样式
------解决方案--------------------
位置放的有问题,修改下:
m_nCmdShow = SW_HIDE;
if (!ProcessShellCommand(cmdInfo))
return FALSE;
// The one and only window has been initialized, so show and update it.
m_pMainWnd->ShowWindow(SW_HIDE);
m_pMainWnd->UpdateWindow();
------解决方案--------------------
在窗口的关闭事件(WM_CLOSE)中加入代码:
WINDOWPLACEMENT wp;
if(GetWindowPlacement(&wp))
{
if (IsZoomed())
wp.flage ¦= WPF_RESTORETOMAXIMIZED;
CString strBuffer;
strBuffer.Format("%i:%i:%i:%i:%i:%i:%i:%i:%i:%i",
wp.flags,wp.showCmd,
wp.ptMinPosition.x, wp.ptMinPosition.y,
wp.ptMaxPosition.x, wp.ptMaxPosition.y,
wp.rcNormalPosition.left , wp.rcNormalPosition.top,
wp.rcNormalPosition.right, wp.rcNormalPosition.bottom);
AfxGetApp()->WriteProfileString("Settings","WindowPos",strBuffer); //写入注册表
}
在InitInstance的最后(return之前)加入代码:
CString strBuffer=GetProfileString("Settings","WindowPos"); //从注册表读出数据
WINDOWPLACEMENT wp;
if(!strBuffer.IsEmpty())
{
int nRead=_stscanf(strBuffer,"%i:%i:%i:%i:%i:%i:%i:%i:%i:%i",
&wp.flags, &wp.showCmd,
&wp.ptMinPosition.x, &wp.ptMinPosition.y,
&wp.ptMaxPosition.x, &wp.ptMaxPosition.y,
&wp.rcNormalPosition.left , &wp.rcNormalPosition.top,
&wp.rcNormalPosition.right, &wp.rcNormalPosition.bottom);
if(cRead==10)
{
m_pMainWnd->SetWindowPlacement(&wp);
}
}
程序要运行两次以后才能看到结果,第一次是保存数据,第二次以后就能读出位置显示。
--- 这是保存状态的,你可以对应的反过来读取,不保存状态...
------解决方案--------------------
我是这样解决的。
- C/C++ code
m_nCmdShow=SW_HIDE; if (!ProcessShellCommand(cmdInfo)) return FALSE; // m_pMainWnd->ShowWindow(SW_SHOW); // m_pMainWnd->UpdateWindow(); return TRUE;
------解决方案--------------------
你遇到的问题我也遇到过,虽然情况和你的不太一样,不过我想还是可以帮你分析一下啊的,我做的那个小系统是一个多文档系统,当时想给这个程序添加一个登陆对话框,刚开始也有闪屏的情况,我想是不是因为程序初始化的顺序没有弄清楚的原因啊,
CLoginDlg dlg;
if(dlg.DoModal()==IDOK)
{
pMainFrame->ShowWindow(m_nCmdShow);
pMainFrame->UpdateWindow();
return TRUE;
}
else
{
::PostQuitMessage(-1);
return false;
}
这样它在多文档窗口显示之前调用,就不用闪屏了,不知道能不能给你帮助,不过希望有用。
------解决方案--------------------
m_nCmdShow = SW_HIDE;
if (!ProcessShellCommand(cmdInfo))
return FALSE;
我试了,好用。
至于第二次启动后又闪,不会在程序退出时修改注册表啊。