Choupinou a écrit :
Est-ce que quelqu'un sait comment faire ou a déjà utilisé les boites de dlg modeless?
|
C'est tout écrit dans le MSDN, y'a qu'à chercher un peu
Mais bon, je sais que c'est parfois pénible de chercher, alors je vais être bon prince et donner la solution:
il faut que la classe de ta fenêtre modeless ressemble à ça:
Code :
- class CModelessDlg: public CDialog
- {
- private:
- using CDialog::Create;
- DECLARE_DYNAMIC(CModelessDlg)
- public:
- CModelessDlg(CWnd* pParent = NULL); // standard constructor
- virtual ~CModelessDlg();
- BOOL Create();
- // Dialog Data
- enum { IDD = IDD_MODELESSDLG };
- protected:
- CWnd* m_pParent;
- int m_nID; /**< Window ID. */
- virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
- DECLARE_MESSAGE_MAP()
- };
|
Ensuite, dans le constructeur, pense à garder un pointeur sur la fenêtre mère, parfois c'est assez utile
Code :
- IMPLEMENT_DYNAMIC(CModelessDlg, CDialog)
- CModelessDlg::CModelessDlg(CWnd* pParent /*=NULL*/)
- : CDialog(CModelessDlg::IDD, pParent)
- {
- ASSERT(pParent != NULL);
- m_pParent = pParent;
- m_nID = CModelessDlg::IDD;
- }
|
Reste encore la fonction Create à implémenter:
Code :
- BOOL CModelessDlg::Create()
- {
- return CDialog::Create(m_nID, m_pParent);
- }
|
Maintenant, pour créer une instance de la fenêtre, il ne faut pas utilsier le DoModal, mais le Create():
Code :
- CModelessDlg dlg = new CModelessDlg(this);
- dlg->Create();
|
Finalement, utilise le DestroyWindow() pour fermer la fenêtre, et n'oublie pas de détuire le pointeur. En fait, comme en général une fenêtre modeless est faite pour être utilisée en même temps qu'une autre, il faut créer l'instance de la fenêtre modeless en tant que variable membre de la fenêtre mère, c'est plus pratique pour pouvoir accéder à la fenêtre modeless depuis n'importe où dans le code de la fenêtre mère.
Voilà, je pense n'avoir rien oublié.
Message édité par m0rbac le 13-07-2004 à 13:39:28