15 мая 2023 года "Исходники.РУ" отмечают своё 23-летие!
Поздравляем всех причастных и неравнодушных с этим событием!
И огромное спасибо всем, кто был и остаётся с нами все эти годы!

Главная Форум Журнал Wiki DRKB Discuz!ML Помощь проекту


Embedded dialog problem

Greg Brewer - Ext. 4623 -- gbrewer@ontime.com
Friday, April 26, 1996

In MFC 4.1 DoModal doesn't really create a modal dialog, it creates a 
modeless dialog and emulates a modal dialog's behavior.  (note in VC++ 1.5 
this in NOT what happens)  It disables the dialog's parent window before 
creating the dialog an re-enables it after (dlgcore.cpp, CDialog::DoModal).  
If no parent window is specified the parent window defaults to the 
application's main window.  

So in your example Dialog C's parent should be Dialog B.

Hope this helps.

Gregory A. Brewer
Software Engineer
Campbell Services, Inc
(810) 559-5955 ext. 4623
GBREWER@ONTIME.COM
Home Page: http://www.ontime.com
-------------
Original Text
>From NAVID@SMTP (Navid Ghiami) {navid@direct.ca}, on 4/24/96 6:49 AM:
Env:  VC4.1   NT4.0(build 1234)

I have a dialog based application that has dialogs inside dialogs.
I use DoModal to bring them up.  My problem is that when the third
dialog exists the first dialog becomes active.

Here is what happens:

1. Application starts : Dialog A
2. in A press a button to call:  B.DoModal();
3. in B press a button to call:  C.DoModal();
4. in C press OK to exit the dialog.
now Dialog A becomes active, which is not what i want.  I want A to wait 
until
B also exists.

How can I have dialogs inside dialogs where the control follows the 
hierarchy,
keeping in mind that in the above example B and C could be called from any
other dialog?

any suggestions welcome,
navid.




Mats Mеnhav -- manhav@connectum.skurup.se
Sunday, April 28, 1996

-- [ From: Mats Manhav * EMC.Ver #2.5.02 ] --

If the modal dialog box is only a fake modal dialog.
Is it possible to make a modeless dialog looking exactly
the same as the modal one. I would like to have my property 
sheets as modeless, but I do want the OK Cancel and Help 
buttons in there.

Mats
-------- REPLY, Original message follows --------

> Date: Friday, 26-Apr-96 11:29 AM
> 
> From: Greg Brewer - Ext. 4623  \ Internet:    (gbrewer@ontime.com)
> To:   MFCList                  \ Internet:    (mfc-l@netcom.com)
> 
> Subject: re: Embedded dialog problem
> 
> In MFC 4.1 DoModal doesn't really create a modal dialog, it creates a 
> modeless dialog and emulates a modal dialog's behavior.  (note in VC++ 1.5

> this in NOT what happens)  It disables the dialog's parent window before 
> creating the dialog an re-enables it after (dlgcore.cpp, CDialog::DoModal)
.  
> If no parent window is specified the parent window defaults to the 
> application's main window.  
> 
> So in your example Dialog C's parent should be Dialog B.
> 
> Hope this helps.
> 
> Gregory A. Brewer
> Software Engineer
> Campbell Services, Inc
> (810) 559-5955 ext. 4623
> GBREWER@ONTIME.COM
> Home Page: http://www.ontime.com
> -------------
> Original Text
> >From NAVID@SMTP (Navid Ghiami) {navid@direct.ca}, on 4/24/96 6:49 AM:
> Env:  VC4.1   NT4.0(build 1234)
> 
> I have a dialog based application that has dialogs inside dialogs.
> I use DoModal to bring them up.  My problem is that when the third
> dialog exists the first dialog becomes active.
> 
> Here is what happens:
> 
> 1. Application starts : Dialog A
> 2. in A press a button to call:  B.DoModal();
> 3. in B press a button to call:  C.DoModal();
> 4. in C press OK to exit the dialog.
> now Dialog A becomes active, which is not what i want.  I want A to wait 
> until
> B also exists.
> 
> How can I have dialogs inside dialogs where the control follows the 
> hierarchy,
> keeping in mind that in the above example B and C could be called from any
> other dialog?
> 
> any suggestions welcome,
> navid.
> 

-------- REPLY, End of original message --------


--
==========================================================================
Mats Mеnhav (Mats Manhav for 7-bit people)
email:manhav@connectum.skurup.se   WWW: http://connectum.skurup.se/~manhav
FAX:  (int) 46 (0) 414 243 05      Phone: (int) 46 (0) 414 243 05         
==========================================================================




David W. Gillett -- DGILLETT@expertedge.com
Monday, April 29, 1996

> If the modal dialog box is only a fake modal dialog. Is it possible
> to make a modeless dialog looking exactly the same as the modal
> one. I would like to have my property sheets as modeless, but I do
> want the OK Cancel and Help buttons in there.

  CPropertySheet has a data member (m_psh?) which contains various 
information passed on to the COMCTL32.DLL PropertySheet() 
implementation, and one of those is a flag indicating if the property 
sheet is to be modeless.  It's possible that if you derive your own 
sheet class, you might be able to override this in OnCreate() (before 
the base-class call, I'd expect) and so force creation of a sheet 
with modal appearance even though it won't be operated modally.
  [If PropertySheet() really does a modal dialog when the "modeless" 
flag is not set, this isn't going to work.  The other alternative is 
to build your own modeless dialog with the necessary buttons, and 
with a modeless CPropertySheet-derivative as a child.  This is a bit 
more grunt-work, but not particularly difficult.]

Dave





| Вернуться в корень Архива |