2010-02-22 1 views
1

Désolé pour les questions stupides, je fais tout comme il est décrit dans ce tutoriel: http://www.functionx.com/visualc/howto/calldlgfromdlg.htmAppeler une seconde boîte de dialogue à partir d'une fenêtre de dialogue ne parvient pas à faire l'un actif

Je crée la fenêtre de dialogue et essayez d'appeler une autre boîte de dialogue en réponse à un bouton presse en utilisant le code suivant:

CSecondDlg Dlg; 
Dlg.DoModal(); 

fenêtre apparaît Modal mais n'est pas actif, et la fenêtre principale est pas trop active et tout en retard. Voici une capture d'écran:

Two dialogs interfering with each other http://img713.imageshack.us/img713/3919/63418833w.gif

Et voici les définitions pour mes dialogues:

IDD_DIARY_TEST_DIALOG DIALOGEX 0, 0, 320, 200 
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU 
EXSTYLE WS_EX_APPWINDOW 
CAPTION "diary_test" 
FONT 8, "MS Shell Dlg", 0, 0, 0x1 
BEGIN 
    DEFPUSHBUTTON "Second",IDC_SECOND_BTN,209,179,50,14 
    PUSHBUTTON  "Cancel",IDCANCEL,263,179,50,14 
    CTEXT   "TODO: Place dialog controls here.",IDC_STATIC,10,96,300,8 
END 

IDD_SECOND_DLG DIALOGEX 0, 0, 195, 127 
STYLE DS_SETFONT | DS_FIXEDSYS | WS_POPUP | WS_VISIBLE | WS_DISABLED | WS_CAPTION 
CAPTION "Second" 
FONT 8, "MS Shell Dlg", 400, 0, 0x0 
BEGIN 
    LTEXT   "TODO: layout property page",IDC_STATIC,53,59,90,8 
    PUSHBUTTON  "Button1",IDC_BUTTON1,61,93,50,14 
END 

Répondre

4

Comparons seulement les styles des deux boîtes de dialogue:

STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
STYLE DS_SETFONT | DS_FIXEDSYS | WS_POPUP | WS_VISIBLE | WS_DISABLED | WS_CAPTION

J'ai indiqué les différences gras, et la raison de vos problèmes devrait maintenant être évident: votre deuxième dialogue est désactivée (WS_DISABLED), empêchant ainsi d'être activé! Une autre différence, le style manquant DS_MODALFRAME, le fera apparaître légèrement anormal (mais ne devrait pas affecter grandement le comportement); la différence finale (WS_SYSMENU) empêche simplement l'affichage d'un menu système (et de l'icône gauche, bouton de fermeture à droite).

L'autre bizarrerie illustré dans la capture d'écran, la deuxième boîte de dialogue affichée mélangée dans les contrôles sur la première, est probablement dû à l'utilisation initiale de WS_CHILDas patriiice surmised ...

Donné ce et l'autre code affiché, Je suppose que vous l'avez créé à l'origine en tant que page de propriétés. Les pages de propriétés, tandis que les semblables aux modèles de boîte de dialogue normaux, sont destinées à être affichées en tant que fenêtres enfants; les boîtes de dialogue modales normales sont et non.

3

Vous ne montrez votre code source, mais il est probable que votre deuxième boîte de dialogue est défini comme un enfant fenêtre au lieu de popup. Vérifiez simplement dans l'éditeur de ressources.

+0

@isergeymd: trouvez la définition de la boîte de dialogue dans le fichier RC et collez-la dans votre question. Sinon, nous ne faisons que deviner ... – Shog9