Modeless dialog box only inerface application
Ken Litwak @actionware.com -- klitwak@actionware.com Tuesday, March 18, 1997 Environment: VC 1.52, Windows 3.1 I've scoured the books I have, the MS KB and "Net resources I can find to find an example of a modeless dialgo box as the only UI for an application. I'm trying to adapt the Cancel dialog from MSJ to do this but it fails in CDialog::Create. I presume this is because it doesn't have a parent window handle, though if I try to do a quick watch on the template name, that seems to be a problem too. ANyway, can anyone point me to a sample for how to do this in VC 1.52? Or perhaps you could provide a code snippet of how to do it? Thanks. Ken Litwak klitwak@actionware.com
Mike Blaszczak -- mikeblas@nwlink.com Friday, March 21, 1997 [Mini-digest: 4 responses] At 17:07 3/18/97 -0800, Ken Litwak wrote: >Environment: VC 1.52, Windows 3.1 > > I've scoured the books I have, the MS KB and "Net resources I can >find to find an example of a modeless dialgo box as the only UI for an >application. I'm trying to adapt the Cancel dialog from MSJ to do this >but it fails in CDialog::Create. I presume this is because it doesn't >have a parent window handle, though if I try to do a quick watch on the >template name, that seems to be a problem too. ANyway, can anyone point >me to a sample for how to do this in VC 1.52? Or perhaps you could >provide a code snippet of how to do it? Thanks. I'm not really sure I understand your question. A modal dialog box is a dialog box that disables all of its ancestor windows while it is active. So, if the main frame window puts up a modal dialog box, the main frame window is disabled until the dialog box goes away. The dialog remains active, of course, until the user closes it. A modeless dialog box is a dialog box that _doesn't_ disable its ancestor windows while it is active. If a main frame window puts up a modeless dialog, the dialog is active and usable but the main frame window is active and usable, too. But if you take away the main frame window and leave the dialog box as the only interface the application has, it turns out that there's really nothing happening. That is, you can't expect the dialog to disable its parent windows because it has none. Since the scope of modality is limited to the application (normally), there's no point in considering modality if the dialog is the only user interface the application provides. For such an application, there's no need to call Create(), then, on the dialog box in question. Just call DoModal(). .B ekiM http://www.nwlink.com/~mikeblas/ These words are my own. I do not speak on behalf of Microsoft. One is too many and a million is not enough. -----From: Paul GerhartKen Litwak wrote: > > Environment: VC 1.52, Windows 3.1 > > I've scoured the books I have, the MS KB and "Net resources I can > find to find an example of a modeless dialgo box as the only UI for an > application. I would think this would be easy to do. Have you ever seen some source for an app that has a splash screen before the mainframe becomes visible? The Brain/Lovette book has an example for a 1.52 or 2 environment where the splash screen is derived from CDialog. That is, initially launch the mainfram with SW_HIDE style and spawn a modeless dialog; unlike the classic splash screen case, you always keep the mainframe hidden and the splash screen visible. HTH -- ######################### # Paul Gerhart # # pgerhart@voicenet.com # ######################### -----From: Ben Burnett Ok, I dont know if i.m telling you what you have already tried but here goes: Using the appwizard make a new projects and remove the view and doc stuff if you dont need it, now in the (project name).cpp change it so that instead of displaing a new view+doc when it starts, it dispalys a dialog box modal/or non-modal. Like so: in -> BOOL CMyApp::InitInstance() remove: ( this junk ) CMultiDocTemplate* pDocTemplate; pDocTemplate = new CMultiDocTemplate( IDR_NONAMETYPE, RUNTIME_CLASS(CMyDoc), RUNTIME_CLASS(CMyFrame), // custom MDI child frame RUNTIME_CLASS(CMyView)); AddDocTemplate(pDocTemplate); // create main MDI Frame window CMainFrame* pMainFrame = new CMainFrame; if (!pMainFrame->LoadFrame(IDR_MAINFRAME)) return FALSE; m_pMainWnd = pMainFrame; add: CMyDialog dlg; dlg.DoModal(); // or create ( which ever you wish to use ) hope this help a little. -----From: Jim Lawson Williams At 17:07 18-03-97 -0800, you wrote: >Environment: VC 1.52, Windows 3.1 > > I've scoured the books I have, the MS KB and "Net resources I can >find to find an example of a modeless dialgo box as the only UI for an >application. I'm trying to adapt the Cancel dialog from MSJ to do this >but it fails in CDialog::Create. I presume this is because it doesn't >have a parent window handle, though if I try to do a quick watch on the >template name, that seems to be a problem too. ANyway, can anyone point >me to a sample for how to do this in VC 1.52? Or perhaps you could >provide a code snippet of how to do it? Thanks. > > >Ken Litwak >klitwak@actionware.com > G'day! The "modeless" is irrelevant. My ancient Kruglinski (1993, ISBN 1-55615-511-5) provides an example as EX22B. Regards, Jim LW >From the BBC's "Barchester Chronicles": "I know that ultimately we are not supposed to understand. But I also know that we must try." -- the Reverend Septimus Harding, crypt-analyst, art-critic, tax-consultant, C++ programmer
DFPav@aol.com Monday, March 24, 1997 Ken: Why does it have to be modeless? If it is the only interface, why can't it be modal? Then all you do is call your CMyDialog::DoModal() from CMyWinApp::InitInstance. Dan
Mihir Dalal -- m_dalal@ECE.concordia.CA Wednesday, March 26, 1997 On Mon, 24 Mar 1997 DFPav@aol.com wrote: > Ken: > Why does it have to be modeless? If it is the only interface, why can't it > be modal? > Then all you do is call your CMyDialog::DoModal() from > CMyWinApp::InitInstance. > Dan I think, I know what has prompted the original poster of this thread, to think of having a modeless dialog interface. The answer is very simple and obvious. The very thought of a modal dialog box brings into any windows user's mind, that it will prevent him from working behind the box, unless he kills it. This is true, for all modal dialogs, that popup from a windows application that has a parent main frame. What the original poster has overlooked is that when the dialog is the only interface without a parent main frame for his application, as Mike said, it is silly to think of its modality. A modal dialog does not prevent you from working on another application which is open on the windows desktop, simultaneously. It only prevents access to its parent main frame. This fact has been overlooked by the original poster, & in the hope to find an answer for a dialog which will not block the desktop area, he/she has thought of using a modeless dialog as an interface, but he/she only needs to be told that whatever he/she is trying to do with his modeless dialog interface, is in any case gonna work with a modal dialog interace too. 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 | Вернуться в корень Архива |