IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MFC Discussion :

Boites de dialogue avec ATL...


Sujet :

MFC

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    228
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 228
    Points : 102
    Points
    102
    Par défaut Boites de dialogue avec ATL...
    J'ai un leger soucis, je ccree des boite des dialogue WTL pour mon aplli, je la declare comme ça;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    class CDialog : public CDialogImpl<CDialog>
    {
    public:
                    enum { IDD = IDD_DEFAULTBOX};<= comme c'est dit chez monsieur MSDN
     
    	BEGIN_MSG_MAP(CDialog)
    	  MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
    	  COMMAND_ID_HANDLER(IDCANCEL, OnCancel)
    	  COMMAND_ID_HANDLER(IDOK, OnOk)
    	END_MSG_MAP()
     
     
     
    };
    Et avec cette classe je veux creer des sous classe avec une tete differente donc un IDD different mon probleme est que je sais pas du tout coment faire pour changer le IDD defini dans ma classe de base CDialog, je voudrais bien savoir comment changer le code pour pouvoir crer un constructeur qui puisse definir ce que vault IDD !!

    J'ai essayer de passer IDD en type UNINT mais la bilbiotheque ATL veut pas

    Est il possible de redefinir les valeurs du type enuméré ??
    Ou ya t'il une autre solution ??

    PS : Virtual ça marche pas non plus

  2. #2
    mat.M
    Invité(e)
    Par défaut
    Au risque de dire une anerie il n'est pas possible de passer une constante à un type avec ATL ( enum en fait définit une constante )
    Pourquoi ?? Parce que les composants développés avec ATL doivent être typés et formattés sur un certain nombre d'octets afin de pouvoir être utilisés par n'importe quel language ( VB, Delphi ....) qui supportent OLE / Active X / COM

    mais la bilbiotheque ATL veut pas
    D'accord mais être plus précis

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    228
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 228
    Points : 102
    Points
    102
    Par défaut Je precise...
    En fait je passe rien du tout ç la construction.
    Je veux simplemnt que le constructeur de la sous classe change le IDD defini dans la calsse de base CDialog, et le truc c'est que j'ai pas la moindre idee de comment faire.

    Si je redefini un enum {IDD = IDD_AUTRECHOSE} dans ma classe fille ça ne fonctionne pas, le template utilisé pour la boite de dialogue est celui de la classe de base.

    Mon probleme est simplemnt comment specifier le IDD pour qu'il puisse etre redefinissable dans les classes filles ?

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    228
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 228
    Points : 102
    Points
    102
    Par défaut la suite
    Pour faire propre je defini IDD comme un identifiant de ressource dans ma classe CDialog, elle a donc comme veut MSDN un membre IDD.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    class CDialog : public CDialogImpl<CDialog>
    {
    public:
     
    	UINT IDD;
    Mais a la compile ç adonne ça

    EROR##
    l\include\atlwin.h(2840) : error C2440: 'type cast' : cannot convert from 'unsigned int CDialog::*' to 'unsigned short'
    Et le code du .h est le suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ::DialogBoxParam(_Module.GetResourceInstance(), MAKEINTRESOURCE(T::IDD),
    					hWndParent, (DLGPROC)T::StartDialogProc, dwInitParam);
    Et il est pas quesion que j'y touche, il faudrait juste que IDD soit du bon type dans ma classe mais comme c'est une donnéée membre je vois pas comment faire pour que à l'appel il y ait pas le CDialog::*

    Et pendant qu'on y est quelqu'un peut m'expliquer pourquoi en definissant enum {IDD = IDD_DEFAULTBOX} ça marche et ça marche pas avec une declaration "normale" ??

Discussions similaires

  1. boite de dialogue avec "ok" et "annuler"
    Par avogadro dans le forum Débuter
    Réponses: 3
    Dernier message: 05/05/2006, 10h33
  2. [vb.net]Boite de dialogue avec combobox
    Par le Daoud dans le forum Windows Forms
    Réponses: 2
    Dernier message: 02/12/2005, 12h53
  3. Boite de dialogue avec trois choix
    Par Virgile59 dans le forum Access
    Réponses: 4
    Dernier message: 08/11/2005, 13h00
  4. [Boite de dialogue] avec password
    Par vasilov dans le forum Composants
    Réponses: 6
    Dernier message: 10/08/2005, 14h34
  5. Boite de dialogue avec opengl
    Par inddzen dans le forum OpenGL
    Réponses: 3
    Dernier message: 23/04/2004, 20h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo