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 :

HINSTANCE


Sujet :

MFC

  1. #1
    Membre averti
    Inscrit en
    Mars 2005
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 21
    Par défaut HINSTANCE
    J'ai besoin de récuperer un handle d'une instance "hInstance" pour créer une fenêtre à l'aide de cette fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    HWND CreateWindowEx(
      DWORD dwExStyle,    
      LPCTSTR lpClassName,  
      LPCTSTR lpWindowName, 
      DWORD dwStyle,     
      int x,               
      int y,              
      int nWidth,        
      int nHeight,          
      HWND hWndParent,     
      HMENU hMenu,         
      HINSTANCE hInstance, 
      LPVOID lpParam     
    );
    Comment dois-je faire?
    Merci d'avance


    [Balises CODE rajoutées par Loulou24, merci d'y penser à l'avenir]

  2. #2
    Expert confirmé

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par défaut
    Utilise le hInstance fourni dans WinMain, ou bien le récupérer via GetModuleHanle( NULL ).

  3. #3
    Membre averti
    Inscrit en
    Mars 2005
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 21
    Par défaut
    OK, mais WinMain est appelé automatiquement par windows. Or je souhaite créer ma fenêtre à un moment bien précis dans mon programme. Je ne pense pas que je puisse avoir le contrôle mon programme en utilisant WinMain.
    Qu'en pensez vous?

  4. #4
    Expert confirmé

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par Pilou_m79
    OK, mais WinMain est appelé automatiquement par windows. Or je souhaite créer ma fenêtre à un moment bien précis dans mon programme. Je ne pense pas que je puisse avoir le contrôle mon programme en utilisant WinMain.
    Qu'en pensez vous?
    Hum, ce n'est pas vraiment Windows qui appelle WinMain, mais le code généré par le compilateur. Et justement, ce startup code donne à WinMain GetModuleHandle( NULL ), qui permet de récupérer le hIstance (qui n'est demandé que sous Win9x/Me au passage).
    Donc CreateWindowEx( ..., GetModuleHandle( NULL ), ... );

  5. #5
    Membre averti
    Inscrit en
    Mars 2005
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 21
    Par défaut
    et comment dois je appeler WinMain dans mon programme?

  6. #6
    Expert confirmé

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par défaut
    C'était pour l'explication. Tu n'as pas à l'appeler, le compilo s'en charge.

  7. #7
    Membre averti
    Inscrit en
    Mars 2005
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 21
    Par défaut
    j'ai du mal a comprendre! J'ai un programme qui tourne et qui a besoin de créer ou non plusieurs fenêtres à des endroits précis.
    Comment dois je faire? (j'ai deja un main par ailleurs)

  8. #8
    Membre averti
    Inscrit en
    Mars 2005
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 21
    Par défaut
    precision : je souhaite créer des fenêtre de type CWnd

  9. #9
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    j'ai du mal a comprendre! J'ai un programme qui tourne et qui a besoin de créer ou non plusieurs fenêtres à des endroits précis.
    Comment dois je faire?
    Ben...

    Citation Envoyé par Aurelien.Regat-Barrel
    CreateWindowEx( ..., GetModuleHandle( NULL ), ... );
    precision : je souhaite créer des fenêtre de type CWnd
    Ce serait pas du MFC ça ?

  10. #10
    Membre averti
    Inscrit en
    Mars 2005
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 21
    Par défaut
    J'ai peut etre melanger les torchons et les serviettes en fait!
    Oui, c'est du MFC

  11. #11
    Membre averti
    Inscrit en
    Mars 2005
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 21
    Par défaut
    Ce que j'ai réellement du mal a comprendre c'est la facon dont on créée un fenêtre de type CWnd!
    J'ai une classe qui hérite de CWnd. Comment doi-je faire pour créer ma fenêtre et l'afficher à partir de cette classe?

  12. #12
    Expert confirmé

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par défaut
    Les questions MFC c'est sur le forum VC++. Je déplace.
    Regarde un peu la doc des MFC:
    http://msdn.microsoft.com/library/en-us/vclib/html/_mfc_CWnd.3a3a.Create.asp
    ainsi que la FAQ VC++:
    http://c.developpez.com/faq/vc/

  13. #13
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    salut,
    effectivement si c'est MFC tu fais fausse route ...
    tu n'as pas a te soucier du main il y en a pas .
    le premier objet creer est de la classe CWinApp et la premiere fonction appelée est InitInstance .
    pour la creation d'une fenetre c'est une histoire de contexte. (ou ? en reponse a quel evenement :menu bouton etc ).
    sachant que l'ide peut te generer de base une application fonctionnelle des le depart..

  14. #14
    Membre averti
    Inscrit en
    Mars 2005
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 21
    Par défaut
    merci pour vos réponses, mais j'ai un peu de mal a vous suivre.
    Mon programme pour l'instant fonctionne avec un main (juste pour pouvoir faire des tests). Il crée une classe "MyController", celle-ci créer un objet de type "MyWindow" qui est une classe qui hérite de CWnd (MyController passe un pointeur sur lui même à cet objet).
    Pour l'instant, mon programme tourne sans que je créée de fenêtre. J'ai un squelette de code et je vérifie ainsi le bonne échange d'informations entre les deux classes. Cela fonctionne bien.
    Maintenant, je souhaite créée une fenêtre et l'afficher... mais je n'arrive pas à comprendre la démarche à effectuer!
    Merci de m'éclairer sur la façon de procéder.

  15. #15
    Expert confirmé

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par défaut
    Les MFC c'est plus qu'une simple bibliothèque pour faire des fenêtres, c'est un framework, avec lequel tu organises ton code d'une certaine manière.
    Tu n'as pas de main(), mais un objet application. C'est le principe de ce framework, c'est comme ça.
    Tu ne devrais pas essayer de courcircuiter ce fonctionnement, tu n'auras que des complications.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. SetWindowsHookEx : pb de HINSTANCE
    Par benji_11 dans le forum Windows
    Réponses: 3
    Dernier message: 18/03/2009, 14h38
  2. Réponses: 32
    Dernier message: 16/04/2007, 11h05
  3. [type] HANDLE vs HINSTANCE
    Par ZaaN dans le forum Visual C++
    Réponses: 4
    Dernier message: 23/01/2007, 14h35
  4. j'ai un problème sur les hinstances
    Par ramaro dans le forum C++
    Réponses: 9
    Dernier message: 26/02/2006, 14h32
  5. Recupérer un HWND a partir d'un HINSTANCE
    Par yotasse dans le forum Windows
    Réponses: 2
    Dernier message: 30/01/2004, 16h00

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