Annoying problem displaying Splash Window..
Serge Wautier -- serge.wautier@ontonet.be
Wednesday, March 05, 1997
[Mini-digest: 9 responses]
Set the WS_EX_TOPMOST style for your splash window. One way to do it is :
m_splash.SetWindowPos(&wndTopMost,...,SWP_NOMOVE|SWP_NORESIZE);
Hope this helps,
Serge Wautier,
Techno Trade s.a.
Belgium
serge.wautier@ontonet.be
http://www.tbox.fr
----------
> From: Mihir Dalal
> To: mfc-l@netcom.com
> Subject: Annoying problem displaying Splash Window..
> Date: mardi 4 mars 1997 8:30
>
>
> Environment: MSVC 1.52, Win 95
> Hi,
>
> I have written the following in CMyApp::InitInstance() to display a
> splash window at startup
>
> BOOL CMyApp::InitInstance()
> {
> ....
> ....
>
> int nCmdShow = m_nCmdShow; // Initialize nCmdShow
>
> m_pMainWnd->UpdateWindow();
> if (m_splash.Create(m_pMainWnd)) // m_splash is a dialog object dervied
> { // from CDialog
> Splash Window
> m_splash.ShowWindow(SW_SHOW);
> m_splash.UpdateWindow();
> }
> m_dwSplashTime = ::GetCurrentTime();
>
> ....
> ....
> }
>
>
> Corrospondingly, the follwing in the overrriden OnIdle() takes care of
> killing the splash window after 4 seconds.
>
> BOOL CmYApp::OnIdle(LONG lCount)
> {
> // call base class idle first
> BOOL bResult = CWinApp::OnIdle(lCount);
>
> // then do our work
> if (m_splash.m_hWnd != NULL)
> {
> if (::GetCurrentTime() - m_dwSplashTime > 4000)
> {
> // timeout expired, destroy the splash window
> m_splash.DestroyWindow();
> m_pMainWnd->ShowWindow(SW_SHOW);
> m_pMainWnd->UpdateWindow();
>
> // NOTE: don't set bResult to FALSE,
> // CWinApp::OnIdle may have returned TRUE
> }
> else
> {
> // check again later...
> bResult = TRUE;
>
> }
> }
> return bResult;
> }
>
>
> My problem, is that the mainframe of my application covers up the splash
> window after roughly one and a half second. The rest of the time, (2 and
> a half seconds) the splash window does exist but gets covered up by the
> application main window.
>
> Is there a way to retain the splash window as the top level window even
> as windows creates the application main window ??
>
> Mihir.
>
>
____________________________________________________________________________
> Mihir Dalal , M.Engg. (Electrical) Student
> Department of Electrical and Computer Engineering
> Concordia University, Montreal, Canada
> http://www.ECE.Concordia.CA/~m_dalal/addr.html
-----From: CADS Software Developer
I would think that you could use the method that all stay on top windows
use - which is using SetWindowPos as follows:-
m_splash.SetWindowPos(&wndTopMost, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
The best place for this is after the call to UpdateWindow in your
InitInstance.
@:-) Jonathan Cox (jonathan@pindar.com)
----------
> From: Mihir Dalal
> To: mfc-l@netcom.com
> Subject: Annoying problem displaying Splash Window..
> Date: 04 March 1997 07:30
>
>
> Environment: MSVC 1.52, Win 95
> Hi,
>
> I have written the following in CMyApp::InitInstance() to display a
> splash window at startup
>
> BOOL CMyApp::InitInstance()
> {
> ....
> ....
>
> int nCmdShow = m_nCmdShow; // Initialize nCmdShow
>
> m_pMainWnd->UpdateWindow();
> if (m_splash.Create(m_pMainWnd)) // m_splash is a dialog object dervied
> { // from CDialog
> Splash Window
> m_splash.ShowWindow(SW_SHOW);
> m_splash.UpdateWindow();
> }
> m_dwSplashTime = ::GetCurrentTime();
>
> ....
> ....
> }
>
>
> Corrospondingly, the follwing in the overrriden OnIdle() takes care of
> killing the splash window after 4 seconds.
>
> BOOL CmYApp::OnIdle(LONG lCount)
> {
> // call base class idle first
> BOOL bResult = CWinApp::OnIdle(lCount);
>
> // then do our work
> if (m_splash.m_hWnd != NULL)
> {
> if (::GetCurrentTime() - m_dwSplashTime > 4000)
> {
> // timeout expired, destroy the splash window
> m_splash.DestroyWindow();
> m_pMainWnd->ShowWindow(SW_SHOW);
> m_pMainWnd->UpdateWindow();
>
> // NOTE: don't set bResult to FALSE,
> // CWinApp::OnIdle may have returned TRUE
> }
> else
> {
> // check again later...
> bResult = TRUE;
>
> }
> }
> return bResult;
> }
>
>
> My problem, is that the mainframe of my application covers up the splash
> window after roughly one and a half second. The rest of the time, (2 and
> a half seconds) the splash window does exist but gets covered up by the
> application main window.
>
> Is there a way to retain the splash window as the top level window even
> as windows creates the application main window ??
>
> Mihir.
>
>
____________________________________________________________________________
> Mihir Dalal , M.Engg. (Electrical) Student
> Department of Electrical and Computer Engineering
> Concordia University, Montreal, Canada
> http://www.ECE.Concordia.CA/~m_dalal/addr.html
>
-----From: DFPav@aol.com
In a message dated 97-03-04 20:28:36 EST, you write:
>
> Is there a way to retain the splash window as the top level window even
> as windows creates the application main window ??
>
> Mihir.
>
How about you use the WS_EX_TOPMOST style for your splash window?
Then nothing will cover it!
Dan
-----From: Pal_Sukhram/svoa0008@ssb.com
--openmail-part-09913e9d-00000001
Content-Type: text/plain; charset=US-ASCII; name="RE:"
Vincent A. Busam -- vbusam@jetstream.com
Thursday, March 06, 1997
[Mini-digest: 3 responses]
We have a similar situation with pop-up message boxes. Try:
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
cs.style &= ~WS_VISIBLE;
return CFrameWnd::PreCreateWindow(cs);
}
Then make sure you show the mainframe after the splash window goes away.
We found this necessary because CDocManager::OnFileNew() in file
docmgr.cpp on line 673 calls pTemplate->OpenDocumentFile(NULL);
Since the second arugment (bMakeVisible) is not given in the call,
it defaults to TRUE which automatically shows the mainframe.
>-----From: Mihir Dalal
>
>When I make the splash window the top level window as you'll suggested,
>the messageboxes (of style MB_OK) both get hidden under the splash and my
>application deadlocks there waiting for the MB_OK to be killed.
>
-----From: Joao Marcos Melo Mendes
Ahoy, :)
On Wed, 5 Mar 1997, Mihir Dalal wrote:
Environment: MSVC 1.52, Win 95
> > > Is there a way to retain the splash window as the top level window even
> > > as windows creates the application main window ??
> Firstly, there are two reasons, why a messagebox would popup during
> initial startup of my application when the splash window has been displayed,
> and the mainframe of my application is being created.
> When I make the splash window the top level window as you'll suggested,
> the messageboxes (of style MB_OK) both get hidden under the splash and my
> application deadlocks there waiting for the MB_OK to be killed.
> Any help for that, or can I somehow make the messageboxes top level ??
I have a different suggestion for you, then. Instead of using
SetWindowPos in your CMyApp.InitInstance, use the following:
CMySpalshWindow.OnActivate(UINT nState, CWnd* pWndOther, BOOL bMinimized )
{
if ( nState == WA_INACTIVE && pWndOther == AfxGetMainWnd() )
SetWindowPos(wndTop,0,0,0,0,SWP_NOMOVE | SWP_NOSIZE | SWP_SHOWWINDOW);
}
Note: I have not tested this, so I can't be sure that it works. Anyways,
Best-O-Luck(tm)! :)
Joao Mendes
MegaMedia, S.A.
"We're fools to make war on our brothers in arms." - Mark Knopfler
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: 2.6.2
mQBNAzKu3TgAAAECAL8+YSEFZ0XrlBMu9t2xDq3rhpWZoscP83VrX5MevAm3UOd6
fOtDKsJxsWugnVMexo50NfBjeWOHz5nA1b9hYx0ABRG0H0pvYW8gTWVuZGVzIDxq
bW1tQG1lZ2FtZWRpYS5wdD4=
=sspP
-----END PGP PUBLIC KEY BLOCK-----
-----From: "Kenneth A. Argo"
At the bottom of your InitInstance is a line that makes the window visible:
// The main window has been initialized, so show and update it.
m_pMainWnd->ShowWindow(SW_SHOW);
m_pMainWnd->UpdateWindow();
What I do is remove these lines and have it happen when the splash screen goes away, that way everything appears to come and go in order.
Ken
----------
From: Mihir Dalal[SMTP:m_dalal@ECE.concordia.CA]
Sent: Tuesday, March 04, 1997 2:31 AM
To: mfc-l@netcom.com
Subject: Annoying problem displaying Splash Window..
Environment: MSVC 1.52, Win 95
Hi,
I have written the following in CMyApp::InitInstance() to display a
splash window at startup
BOOL CMyApp::InitInstance()
{
....
....
int nCmdShow = m_nCmdShow; // Initialize nCmdShow
m_pMainWnd->UpdateWindow();
if (m_splash.Create(m_pMainWnd)) // m_splash is a dialog object dervied
{ // from CDialog
Splash Window
m_splash.ShowWindow(SW_SHOW);
m_splash.UpdateWindow();
}
m_dwSplashTime = ::GetCurrentTime();
....
....
}
Corrospondingly, the follwing in the overrriden OnIdle() takes care of
killing the splash window after 4 seconds.
BOOL CmYApp::OnIdle(LONG lCount)
{
// call base class idle first
BOOL bResult = CWinApp::OnIdle(lCount);
// then do our work
if (m_splash.m_hWnd != NULL)
{
if (::GetCurrentTime() - m_dwSplashTime > 4000)
{
// timeout expired, destroy the splash window
m_splash.DestroyWindow();
m_pMainWnd->ShowWindow(SW_SHOW);
m_pMainWnd->UpdateWindow();
// NOTE: don't set bResult to FALSE,
// CWinApp::OnIdle may have returned TRUE
}
else
{
// check again later...
bResult = TRUE;
}
}
return bResult;
}
My problem, is that the mainframe of my application covers up the splash
window after roughly one and a half second. The rest of the time, (2 and
a half seconds) the splash window does exist but gets covered up by the
application main window.
Is there a way to retain the splash window as the top level window even
as windows creates the application main window ??
Mihir.
____________________________________________________________________________
Mihir Dalal , M.Engg. (Electrical) Student
Department of Electrical and Computer Engineering
Concordia University, Montreal, Canada
http://www.ECE.Concordia.CA/~m_dalal/addr.html
Become an MFC-L member
| Вернуться в корень Архива
|