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

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


OnIdle problem

Philip Beck -- splinta@cix.compulink.co.uk
Thursday, January 16, 1997

        Environment: VC++ 4.0, Windows 95
        
I'm converting a 16 bit mfc app to 32 using visC++ 4.0

If you have version 4.0, try creating an app wizard generated dialog (not 
doc/view) app with mfc statically linked. Using class wizard add an 
onIdle() handler to you app class, and put a break point in the default 
body of the idle handler. 

Shouldn't this break point catch as soon as the app has started ? It 
doesn't on my setup, but if I create a doc/view app it does ???

Is this a bug in version 4.0 or is there a new way of setting up the 
onIdle handler :-  ?   The dialog properties has a 'no idle message' 
switch that looks bugged to me.

Phil.





Ken Nicolson -- kenn@owl.co.uk
Friday, January 17, 1997

[Mini-digest: 4 responses]

On Thu, 16 Jan 97 00:06 GMT0, you wrote:

>        Environment: VC++ 4.0, Windows 95
>       =20
>I'm converting a 16 bit mfc app to 32 using visC++ 4.0
>
>If you have version 4.0, try creating an app wizard generated dialog =
(not=20
>doc/view) app with mfc statically linked. Using class wizard add an=20
>onIdle() handler to you app class, and put a break point in the default=20
>body of the idle handler.=20
>
>Shouldn't this break point catch as soon as the app has started ? It=20
>doesn't on my setup, but if I create a doc/view app it does ???
>
>Is this a bug in version 4.0 or is there a new way of setting up the=20
>onIdle handler :-  ?   The dialog properties has a 'no idle message'=20
>switch that looks bugged to me.

Looking at the source code for v4.2b, WinCore.cpp, Line 3419 in "int
CWnd::RunModalLoop(DWORD dwFlags)", I see:

// call OnIdle while in bIdle state
if (!(dwFlags & MLF_NOIDLEMSG) && hWndParent !=3D NULL && lIdleCount =3D=3D=
 0)
{
   // send WM_ENTERIDLE to the parent
   ::SendMessage(hWndParent, WM_ENTERIDLE, MSGF_DIALOGBOX, =
(LPARAM)m_hWnd);
 }

The dialog window has a parent of NULL, so the idle message is never =
sent.
You could create a hidden parent window and capture the OnIdle stuff =
there.

>Phil.

Ken
-----From: "Kenneth A. Argo" 

Actually it won't break on a dialog based app.  This is because a dialog =
app never runs the main message pump so there is never any idle time.  =
OnIdle() is called when MFC has nothing else to do after trying to =
retrieve a message from the pump and finding nothing there!

Ken



----------
From:  Philip Beck[SMTP:splinta@cix.compulink.co.uk]
Sent:  Wednesday, January 15, 1997 7:06 PM
To:  mfc-l@netcom.com
Cc:  splinta@cix.compulink.co.uk
Subject:  OnIdle problem

        Environment: VC++ 4.0, Windows 95
       =20
I'm converting a 16 bit mfc app to 32 using visC++ 4.0

If you have version 4.0, try creating an app wizard generated dialog =
(not=20
doc/view) app with mfc statically linked. Using class wizard add an=20
onIdle() handler to you app class, and put a break point in the default=20
body of the idle handler.=20

Shouldn't this break point catch as soon as the app has started ? It=20
doesn't on my setup, but if I create a doc/view app it does ???

Is this a bug in version 4.0 or is there a new way of setting up the=20
onIdle handler :-  ?   The dialog properties has a 'no idle message'=20
switch that looks bugged to me.

Phil.




-----From: Tim Lesher 

Look at you application's InitInstance.

When you create a modal dialog-based application using AppWizard, the =
dialog is created modally in InitInstance, and when it returns, =
InitInstance returns a value telling the app to just go away.  Thus, the =
app's main message loop is never called, and the Idle mesages, which are =
handled in the main message loop, are never processed.

What I did in a similar situation (I was using a CPropertySheet, but the =
same logic should apply) was to create the dialog dynamically using the =
new operator, and save the pointer to the dialog in the app's m_pMainWnd =
variable.  Then create the dialog _modelessly_, instead of modally, =
return a good value from InitInstance, and make sure you delete the =
dialog object in your ExitInstance.  It took some tweaking, but this =
eventually worked for me, and I could use the Idle handling in my =
dialog.

Good luck!

Tim Lesher
timl@epix.net

----------
From: 	Philip Beck[SMTP:splinta@cix.compulink.co.uk]
Sent: 	Wednesday, January 15, 1997 7:06 PM
To: 	mfc-l@netcom.com
Cc: 	splinta@cix.compulink.co.uk
Subject: 	OnIdle problem

        Environment: VC++ 4.0, Windows 95
       =20
I'm converting a 16 bit mfc app to 32 using visC++ 4.0

If you have version 4.0, try creating an app wizard generated dialog =
(not=20
doc/view) app with mfc statically linked. Using class wizard add an=20
onIdle() handler to you app class, and put a break point in the default=20
body of the idle handler.=20

Shouldn't this break point catch as soon as the app has started ? It=20
doesn't on my setup, but if I create a doc/view app it does ???

Is this a bug in version 4.0 or is there a new way of setting up the=20
onIdle handler :-  ?   The dialog properties has a 'no idle message'=20
switch that looks bugged to me.

Phil.




-----From: Dong Chen 

At 12:06 AM 1/16/97 GMT0, you wrote:
>        Environment: VC++ 4.0, Windows 95
>        
>I'm converting a 16 bit mfc app to 32 using visC++ 4.0
>
>If you have version 4.0, try creating an app wizard generated dialog (not 
>doc/view) app with mfc statically linked. Using class wizard add an 
>onIdle() handler to you app class, and put a break point in the default 
>body of the idle handler. 
>
>Shouldn't this break point catch as soon as the app has started ? It 
>doesn't on my setup, but if I create a doc/view app it does ???
>
>Is this a bug in version 4.0 or is there a new way of setting up the 
>onIdle handler :-  ?   The dialog properties has a 'no idle message' 
>switch that looks bugged to me.
>
>Phil.
>
>

This has been clearly expressed by Paul DiLascia in his C/C++ Q&A column in
last year June MSJ. Let me know if you can't find a copy of it.
--


Dong
d_chen@ix.netcom.com




Joao Marcos Melo Mendes -- jmmm@megamedia.pt
Sunday, January 19, 1997

[Mini-digest: 2 responses]

Hello, 

On Thu, 16 Jan 1997, Philip Beck wrote:

>         Environment: VC++ 4.0, Windows 95

> If you have version 4.0, try creating an app wizard generated dialog (not 
> doc/view) app with mfc statically linked. Using class wizard add an 
> onIdle() handler to you app class, and put a break point in the default 
> body of the idle handler. 

Dialog-based applications don't go through the normal windows message 
loop. If yo utake a look at your App's InitInstance, you'll see that it 
calls a DoModal on the dialog box object, then returns FALSE.

Try using OnEnterIdle on your CDialog-based object, it should pretty much 
do the trick.

I hope this helps.:)

                                        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: pjn@indigo.ie (pjn)

On Thu, 16 Jan 97 00:06 GMT0, you wrote:

>        Environment: VC++ 4.0, Windows 95
>       =20
>I'm converting a 16 bit mfc app to 32 using visC++ 4.0
>
>If you have version 4.0, try creating an app wizard generated dialog =
(not=20
>doc/view) app with mfc statically linked. Using class wizard add an=20
>onIdle() handler to you app class, and put a break point in the default=20
>body of the idle handler.=20
>
>Shouldn't this break point catch as soon as the app has started ? It=20
>doesn't on my setup, but if I create a doc/view app it does ???
>
>Is this a bug in version 4.0 or is there a new way of setting up the=20
>onIdle handler :-  ?   The dialog properties has a 'no idle message'=20
>switch that looks bugged to me.
>
>Phil.
>
>
>

Modal Dialogs have a different idle time model. Handle WM_KICKIDLE in
your dialog class.
                             '''	  =20
                             @ @
+=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
ooO-(_)-Ooo=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D+
|                                           PJ Naughter              |
|                                                                    |
| Software Developer                   Email: pjn@indigo.ie          |
| Softech Telecom                      Tel:   +353-1-2958384         |
|                                      Fax:   +353-1-2956290         |
| Author of DTime - A Collection       URL:   http://indigo.ie/~pjn  |
| of Date & Time classes for MFC       Mail:  Cahore,                |
|            And                              Ballygarret,           |
| Notpad, the best Notepad clone              Gorey                  |
| for Windows 95 and NT 4                     Co. Wexford            |
|                                             Ireland                |
|                                                                    |
+=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D+




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