2015-12-24 1 views
2

J'essaye actuellement d'exercer C++ avec WTL, et je suis maintenant confronté à ce problème. Jusqu'à présent, j'ai beaucoup travaillé avec WTL, mais j'avais toujours un modèle qui avait déjà la création de fenêtre la plus élémentaire. Cependant, je veux maintenant le faire moi-même, car je ne peux pas arriver au modèle maintenant.Quel HWND devrais-je utiliser pour créer une boîte de dialogue dans ma fonction WinMain?

suivantes:

Ceci est mon WinMain:

#include "stdafx.h" 
#pragma once 
#include "MusicPlayerDialog.h" 
#include "resource.h" 

int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hInstPrev, 
    LPSTR szCmdLine, int nCmdShow) 
{ 
    UNREFERENCED_PARAMETER(szCmdLine); 
    UNREFERENCED_PARAMETER(hInstPrev); 

    _Module.Init(NULL, hInst); 

    MusicPlayerDialog myDialog; 
    MSG msg; 

    myDialog.Create(**//PROBLEM//**) 

    myDialog.ShowWindow(nCmdShow); 
    myDialog.UpdateWindow(); 

    while (GetMessage(&msg, NULL, 0, 0) > 0) 
    { 
     TranslateMessage(&msg); 
     DispatchMessage(&msg); 
    } 

    return msg.wParam; 
} 

Et voici ma boîte de dialogue:

#pragma once 
#include "stdafx.h" 
#include "resource.h" 

class MusicPlayerDialog : public CDialogImpl<MusicPlayerDialog> 
{ 
public: 

    enum { IDD = IDD_MAINDIALOG }; 

    BEGIN_MSG_MAP(MusicPlayerDialog) 
     MESSAGE_HANDLER(WM_CLOSE, OnClose) 
     MESSAGE_HANDLER(WM_DESTROY, OnDestroy) 
     MESSAGE_HANDLER(WM_INITDIALOG, OnInit) 
    END_MSG_MAP() 

    LRESULT OnClose(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); 
    LRESULT OnDestroy(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); 
    LRESULT OnInit(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); 

private: 

}; 

Je voudrais vraiment le faire avec une boîte de dialogue, étant donné qu'il est plus facile pour les débutants comme moi pour créer une interface graphique avec le concepteur de dialogue. Je suis sûr que l'utilisation de fenêtres brutes est meilleure, mais je veux juste apprendre les communications entre les fenêtres, les boîtes de dialogue, etc.

Mon problème est maintenant droit, que je ne sais pas quoi passer à myDialog.Create()

En premier lieu, le problème est le HWND je dois lui passer. J'ai lu sur MSDN, et comme il semble, le paramètre représente la fenêtre "Parent" de Dialogues.

Cependant, je n'ai pas encore créé d'autres fenêtres, donc il n'y a rien à y passer.

Est-ce que je dois maîtriser, je ne sais pas, ma ... fenêtre de bureau? Quelque chose comme ca? Je ne peux vraiment pas le comprendre.

Je sais qu'il existe un moyen de saisir la fenêtre parent d'une fenêtre/boîte de dialogue donnée, mais je ne pense pas que cela fonctionnerait ici, étant donné qu'il n'y a rien à saisir.

+0

[Une poignée à la fenêtre parent ou le propriétaire de la fenêtre en cours de création. Pour créer une fenêtre enfant ou une fenêtre possédée, fournissez un handle de fenêtre valide. ** Ce paramètre est facultatif pour les fenêtres contextuelles. **] (https://msdn.microsoft.com/fr-fr/library/windows/desktop/ms632679). –

Répondre

2

Si HWND est NULL, la fenêtre parente de l'objet de dialogue est définie sur la fenêtre principale de l'application. Une autre option consiste à utiliser CWnd* AFXAPI AfxGetMainWnd(); ce qui renvoie la fenêtre principale de l'application si elle est appelée à partir du thread principal de l'application.

Voir aussi CDialog::Create et AfxGetMainWnd

+0

Génial! Ça marche! – Sossenbinder