DoModal() and Hidden Window
D. A. Dunlap -- devincci@ix.netcom.com Tuesday, January 28, 1997 Environment: VC++ 4.0, Win 95 I've generated an AppWizard Dialog based Application. Is there a way to prevent the application's main dialog window from appearing upon a call to DoModal()? I know, why would I want to do this? I just would like to know if this is possible? I would like to have all the results of DoModal() except for the dialog appearing, while still loading into memory. Would I have to call Create() for the dialog? Or is there a hack to hide the window? Curently, to accomplish this, I've set a timer in InitInstance() and then, in the OnTimer Event, I call ShowWindow(SW_HIDE) followed by KillTimer(). This produces a really unprofessional look because the dialog appears for a split second then disappears.... Maybe .B ekiM can help me..... Hopelessly unprofessional...... Thanks in Advance
krishna@hclc.hclc-ggn.hcla.com Wednesday, January 29, 1997 [Mini-digest: 7 responses] Hi , For The window to be hidden in begining you have to call the CWnd::ModifyStyle(WS_VISIBLE,WS_MINIMIZE,0); before the default CDialog::OnInitDialog(); member function is called .This will modify the style of window you are creating and remove WS_VISIBLE style from its present style and open the main window in Minimized state. /************************************************************************ **************** *****Expert is a person called at last moment to share the blame ****** /************************************************************************ **************** ---------- >From: D. A. Dunlap >To: mfc-l@netcom.com >Subject: DoModal() and Hidden Window >Date: Tuesday, January 28, 1997 11:07AM > > Environment: VC++ 4.0, Win 95 > >I've generated an AppWizard Dialog based Application. > >Is there a way to prevent the application's main dialog >window from appearing upon a call to DoModal()? > >I know, why would I want to do this? >I just would like to know if this is possible? > >I would like to have all the results of DoModal() >except for the dialog appearing, while still loading into memory. > >Would I have to call Create() for the dialog? >Or is there a hack to hide the window? > >Curently, to accomplish this, I've set a timer in InitInstance() >and then, in the OnTimer Event, I call ShowWindow(SW_HIDE) > followed by KillTimer(). This produces a really unprofessional look >because the dialog appears for a split second then disappears.... > >Maybe .B ekiM can help me..... > >Hopelessly unprofessional...... >Thanks in Advance > > > -----From: SyedAt 12:37 AM 1/28/97 -0500, you wrote: > Environment: VC++ 4.0, Win 95 > >I've generated an AppWizard Dialog based Application. > >Is there a way to prevent the application's main dialog >window from appearing upon a call to DoModal()? > I have not tried this, so there is no guarantee it will work but you can set the visibility of the dialog to none (uncheck the WS_VISIBLE attribute) and finf out if it works. -----From: Roma D. A. Dunlap wrote: > > Environment: VC++ 4.0, Win 95 > > I've generated an AppWizard Dialog based Application. > > Is there a way to prevent the application's main dialog > window from appearing upon a call to DoModal()? > [snip] Hello! I can think of two possible solutions (both not tested): 1. Do not give WS_VISIBLE style to your dialog template. 2. In the dialog template give to the dialog a coordinates which are outside the screen area, like (2000, 2000). This way you'll avoid appearing of your dialog for a split second. Than hide it and make MoveWindow() to the screen area. HTH. -Roma -----From: David Little Why didn't you call ShowWindow(SW_HIDE) in OnInitDialog()? = WM_INITDIALOG is the last message posted before WM_PAINT, so that is = your last chance to hide it without it flashing. =20 Oh, and ShowWindow(..) is hardly a hack........ ---------- From: D. A. Dunlap[SMTP:devincci@ix.netcom.com] Sent: Monday, January 27, 1997 11:37 PM To: mfc-l@netcom.com Subject: DoModal() and Hidden Window Environment: VC++ 4.0, Win 95 I've generated an AppWizard Dialog based Application. Is there a way to prevent the application's main dialog=20 window from appearing upon a call to DoModal()? I know, why would I want to do this? I just would like to know if this is possible? I would like to have all the results of DoModal()=20 except for the dialog appearing, while still loading into memory. Would I have to call Create() for the dialog? Or is there a hack to hide the window? Curently, to accomplish this, I've set a timer in InitInstance()=20 and then, in the OnTimer Event, I call ShowWindow(SW_HIDE) followed by KillTimer(). This produces a really unprofessional look because the dialog appears for a split second then disappears.... Maybe .B ekiM can help me..... Hopelessly unprofessional...... Thanks in Advance =20 -----From: "Doug Brubacher" I agree this is an unusually thing to request, but I did a little experimentation and found something that works. In your dialog override the WM_NCPAINT message. This message does not appear in Class Wizard but is fully documented. Declaration: afx_msg void OnNcPaint(); Message Map entry ON_WM_NCPAINT() Definition: void CMfcldlgDlg::OnNcPaint() { ShowWindow( SW_HIDE ); } Regards, Doug Brubacher Doug_Brubacher@compuware.com -----From: ybriklin@juno.com (Yuriy Briklin) Hi. Unfortunately I don't know any good solution to your problem. Maybe it doesn't exist because DoModal calls DialogBoxIndirect which always displays the dialog. In the Help I found: "Although an application can designate the WS_VISIBLE style, Windows always displays a modal dialog box regardless of whether the dialog box template specifies the WS_VISIBLE style." My advice is to change the size of the dialog to zero before it is visible. I did it like this: BOOL CMyDlg::OnInitDialog() { CDialog::OnInitDialog(); //Store Dialog size GetWindowRect(m_rectOriginalDlgSize); MoveWindow(0,0,0,0,FALSE); ... ... } In this case the dialog will not appear on the screen until you restore the original size of the dialog: MoveWindow(m_rectOriginalDlgSize,TRUE); I hope this will help you. Yuriy Briklin e-mail: ybriklin@juno.com On Tue, 28 Jan 1997 00:37:42 -0500 "D. A. Dunlap" writes: > Environment: VC++ 4.0, Win 95 > > I've generated an AppWizard Dialog based Application. > > Is there a way to prevent the application's main dialog > window from appearing upon a call to DoModal()? > > I know, why would I want to do this? > I just would like to know if this is possible? > > I would like to have all the results of DoModal() > except for the dialog appearing, while still loading into memory. > > Would I have to call Create() for the dialog? > Or is there a hack to hide the window? > > Curently, to accomplish this, I've set a timer in InitInstance() > and then, in the OnTimer Event, I call ShowWindow(SW_HIDE) > followed by KillTimer(). This produces a really unprofessional look > because the dialog appears for a split second then disappears.... > > Maybe .B ekiM can help me..... > > Hopelessly unprofessional...... > Thanks in Advance > > > -----From: hou@tfn.com (Bing Hou) At near end of your OnInitDialog function, insert SetWindowPos(NULL, 0, 0, 0, 0, SWP_...); to set the dialog's size to zero, so it won't show. However it still has the focus even though user doesn't see anything. You can set focus back to a window of your choice in the app's OnActivateApp function. Bing Hou hou@tfn.com ------------------------------------------------------------------------ The shortest distance between two points is always under construction. - Noelie Alito ______________________________ Reply Separator _________________________________ Subject: DoModal() and Hidden Window Author: "D. A. Dunlap" at Internet Date: 1/28/97 12:37 AM Environment: VC++ 4.0, Win 95 I've generated an AppWizard Dialog based Application. Is there a way to prevent the application's main dialog window from appearing upon a call to DoModal()? I know, why would I want to do this? I just would like to know if this is possible? I would like to have all the results of DoModal() except for the dialog appearing, while still loading into memory. Would I have to call Create() for the dialog? Or is there a hack to hide the window? Curently, to accomplish this, I've set a timer in InitInstance() and then, in the OnTimer Event, I call ShowWindow(SW_HIDE) followed by KillTimer(). This produces a really unprofessional look because the dialog appears for a split second then disappears.... Maybe .B ekiM can help me..... Hopelessly unprofessional...... Thanks in Advance
mark -- mark@radmail.rad.co.il Thursday, January 30, 1997 Set invisible style of dialog resource or override OnInitDialog() and do ShowWindow(SW_HIDE)there. D. A. Dunlap wrote: > > Environment: VC++ 4.0, Win 95 > > I've generated an AppWizard Dialog based Application. > > Is there a way to prevent the application's main dialog > window from appearing upon a call to DoModal()? > > I know, why would I want to do this? > I just would like to know if this is possible? > > I would like to have all the results of DoModal() > except for the dialog appearing, while still loading into memory. > > Would I have to call Create() for the dialog? > Or is there a hack to hide the window? > > Curently, to accomplish this, I've set a timer in InitInstance() > and then, in the OnTimer Event, I call ShowWindow(SW_HIDE) > followed by KillTimer(). This produces a really unprofessional look > because the dialog appears for a split second then disappears.... > > Maybe .B ekiM can help me..... > > Hopelessly unprofessional...... > Thanks in Advance
David Shoots -- dshoots@lmcorp.com Monday, February 03, 1997writes: Is there a way to prevent the application's main dialog window from appearing upon a call to DoModal()? I know, why would I want to do this? I just would like to know if this is possible? Here's my little trick to do this. Add the m_bKeepHidden to the dialog and set it to FALSE in the constructor. When you want it to be visible, set it to TRUE and call ShowWindow (SW_SHOW). void CMainDlg::OnWindowPosChanging(WINDOWPOS FAR* lpwndpos) { if ( m_bKeepHidden ) { #ifndef NDEBUG if ( lpwndpos->flags & SWP_SHOWWINDOW ) TRACE0 ( "Preventing Dialog from being shown\n" ) ; #endif lpwndpos->flags &= ~SWP_SHOWWINDOW ; } CDialog::OnWindowPosChanging(lpwndpos); }
| Вернуться в корень Архива |