begin process at 2012 05 29 13:28:39
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

[MFC] Dialog non modal


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

[MFC] Dialog non modal

jeudi 2 décembre 2004 à 11:16:49 | [MFC] Dialog non modal

Helau

Bonjour,

Mon application utilise des boites de dialogues non modales, car je suis obligée de faire un create et un show window, par forcément en même tps.

Ceci dit, je souhaiterais qu'un fois ma boite affichée, elle ait le comportement d'une boite modale, càd que je ne puisse pas cliquer ailleurs tant que la boite n'est pas fermée (close, ok, cancel ou autre bouton)

J'ai fait plusieurs essais non concluants (runmodalloop, beginmodalstate, le style "system modal dans mon dialog", soit ça ne fait rien, soit ça "freeze" mon appli qd je clique ailleurs que sur la boite.)

Est ce que quelqu'un aurait une idée.
Merci.
Helau.
jeudi 2 décembre 2004 à 12:15:23 | Re : [MFC] Dialog non modal

ymca2003

Désactiver le parent à l'affichage du dialogue et réactiver à la fermeture.

// ouverture :
HWND hWndParent = PreModal();
BOOL bEnableParent = FALSE;
if (hWndParent != NULL && ::IsWindowEnabled(hWndParent))
{
::EnableWindow(hWndParent, FALSE);
bEnableParent = TRUE;
}

// fermeture :
if (bEnableParent)
::EnableWindow(hWndParent, TRUE);
if (hWndParent != NULL && ::GetActiveWindow() == m_hWnd)
::SetActiveWindow(hWndParent);
PostModal();

Tiré du code de la fonction DoModal de CDialog
jeudi 2 décembre 2004 à 14:25:53 | Re : [MFC] Dialog non modal

Helau

Je suis désolée, ça ne marche pas !

Il n'est pas possible d'utiliser PreModal avec une boite modeless dejà créée !


HWND CDialog::PreModal()
{
// cannot call DoModal on a dialog already constructed as modeless
ASSERT(m_hWnd == NULL);

....
}


Je ne sais pas trop comment faire. J'ai testé plusieurs idées, en essayant de me baser sur ce qui est fait dans DoModal, mais toujours sans succès.

Help, please !

Merci.
Helau.
jeudi 2 décembre 2004 à 14:58:38 | Re : [MFC] Dialog non modal

ymca2003

Et juste en faisant le EnableWindow() sur le parent et les autres dialogues non modaux de l'appli
vendredi 3 décembre 2004 à 09:29:18 | Re : [MFC] Dialog non modal

Helau

Voici ce que j'ai testé :

m_bAfficheBoite = true;

CWnd *pWnd = ::AfxGetMainWnd();
// GetWindow(GW_OWNER);
hWndParent = pWnd->GetSafeHwnd();
//AfxUnhookWindowCreate();
bEnableParent = FALSE;
if (hWndParent != NULL && ::IsWindowEnabled(hWndParent))
{
::EnableWindow(hWndParent, FALSE);
bEnableParent = TRUE;
}

Si je fais ShowWindow(SW_SHOW) ensuite, ça affiche ma boite, mais mon appli est "gelée"

Si je fais ShowWindow(SW_SHOW) avant, ça affiche ma boite, mon edit qui a le focus est active (je peux écrire dedans) mais je ne peux pas acceder aux autres contrôles de mon dialog. (par souris ni par clavier).

La touche entrée est active et ferme ma boite (j'ai mis le code de "fermeture" sur le OnOK).

J'ai peut être oublié qqch qqpart...

Voici mon code de fermeture si besoin

if (m_bAfficheBoite)
{
if (bEnableParent)
::EnableWindow(hWndParent, TRUE);
if (hWndParent != NULL && ::GetActiveWindow() == m_hWnd)
::SetActiveWindow(hWndParent);

// destroy modal window

// PostModal();
}

m_bAfficheBoite = false;

CDialog::OnOK();
lundi 6 décembre 2004 à 12:01:16 | Re : [MFC] Dialog non modal

Helau

Réponse acceptée !
Merci ymca2003, tu m'as bien aiguillée.
Voici finalement ce que j'ai fait, et qui a l'air de marcher :

CWnd *pWnd = ::AfxGetMainWnd();
// GetWindow(GW_OWNER);
hWndParent = pWnd->GetSafeHwnd();
//AfxUnhookWindowCreate();
bEnableParent = FALSE;
if (hWndParent != NULL && ::IsWindowEnabled(hWndParent))
{
::EnableWindow(hWndParent, FALSE);
bEnableParent = TRUE;
}

EnableWindow();
ShowWindow(nCmdShow);


En fait, quand on désactive le parent, on désactive implicitement les enfants. Il suffit donc de dire que l'enfant ne doit pas rester déactivé.

A bientôt.


Cette discussion est classée dans : boite, dialog, mfc, modal, ailleurs


Répondre à ce message

Sujets en rapport avec ce message

Deux boite de dialog en MFC [ par aabhanane ] Bonjour à tous, j'ai créer une appliaction MFC avec une boite de dialogue principale. J'ai créé un boutton dans cette boite de dialogue. Quand je cliq Boite de Dialog type : CFormView [ par BlueReaver ] BonjourJe suis obligé de travailler avec les MFC pour mon projet et je souhaiterai faire apparaitre une boite de dialog pour y afficher des Histogramm Probléme de focus, de clavier sur boite de dialog [ par barraq ] Bonjour, Je développe un interface composée d'une boite de dialogue et de plusieur static. Dans chaque static je lance plusieurs plugins, chaque plugi réduction dans le systray d'une appli MFC Boite de dialogue [ par matt22 ] Bonjour à tous et d'avance merci pour votre aide. Je suis pas très doué en C++ et j'ai un petit soft a faire absolument. j'ai fais un petit programme Probleme Vue/dialog avec MFC [ par yann_lo_san ] Salut, avec MFC :J'ai une vue parent et un dialog non modal enfant.J'essaye d'appeler une méthode du parent depuis le dialog enfant.// MyModelessDialo Ajouter un menu dans une application MFC AppWizard (Dialog based ) [ par yaslikurk ] Bonjour,En effet je suis un débutant en programmation C++ (avec MFC AppWizard).Cependant j'ai crée un projet WCE MFC AppWizard (avec embedded c++) et Boite de Dialog non modale [ par orak ] bonjour,pour creer mes boites de dialog, j'utilise habituellement la fonction "DialogBoxIndirect", qui creer une boite de dialog modale sans ressource dialog modeless et blocage en arriere plan [ par v6comm89 ] bonjourvoila mon probleme j'ai une fenetre de dialog qui doit tout le temps etre active elle permet de suivre les etapes, je l'ai donc mis en non moda cree boite dialog dans DLL [ par bonjour__ ] salut tous le monde.j'ai cherche comment cree les boite de dialog avec leur fonction procedure ( modale ou non )dans les fichier executable DLL .voici MFC & OpenGL [ par jojomillenium ] Bonjour, J'aimerai faire avec Visual Studio 6 une MFC Dialog-Based (je trouve plus simple pour ajouter des menu et des boite de dialog pour changer en


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,967 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales