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

Visual C++ Discussion :

Créer un écran avec VC++ 6.0


Sujet :

Visual C++

  1. #21
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 408
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 408
    Par défaut
    Typiquement, il faut mémoriser le HMODULE passé à la DLL :
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    //##########
    //# Dll.cpp
    //##########
     
    static HMODULE g_hThisModule;
     
    //Fonction d'initialisation de la DLL
    BOOL APIENTRY DllMain(
     HANDLE hModule, 
     DWORD  ul_reason_for_call, 
     LPVOID lpReserved
     )
    {
    	switch(ul_reason_for_call)
    	{
    	case DLL_PROCESS_ATTACH:
    		g_hThisModule = hModule;
    		break;
    	}
    	return TRUE;
    }
     
    //Fonction exportée
    EXTERN_C NOMDELADLL_API void WINAPI ShowDllModalDialog( /*... */ )
    {
    	DialogBoxParam(g_hThisModule, MAKEINTRESOURCE(IDD_DIALOG1), NULL, DialogProc, /* ... */);
    }
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  2. #22
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 408
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 408
    Par défaut
    Citation Envoyé par Mat.M
    Je doute que pour une fenetre autre qu'une fenetre de type Dialog ( c.a.d.du genre SDI ) on puisse gerer une boucle de message
    Styron une MessageBox c'est systeme
    Je ne vois pas pourquoi on ne pourrait pas.
    On peut mettre ce code à peu près où l'on veut...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    MSG lastMsg;
    while(GetMessage(&lastMsg, NULL, 0, 0) > 0)
    {
    	//On peut mettre ce qu'on veut ici :
    	//TranslateAccelerator() pour les touches de raccourci,
    	//IsDialogMessage() pour les fonctionalités clavier d'une boîte de dialogue,
    	//TranslateMessage() pour les WM_CHAR,
    	//DispatchMessage() pour ce qui n'a pas été détourné par IsDialogMessage()...
    }
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #23
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2007
    Messages : 13
    Par défaut y a juste un pb
    Je n'ai aucun contrôle sur le programme qui appelle la fonction de la Dll !
    Il charge la Dll et appelle la fonction dont voici la signature :

    DLLEXPORTC long N_MQRCTR_EXIT ( char * LCH_Exit, char * LCH_Param, char * PST_lhsSegExit )
    (comme je l'ai dit plus haut dans les paramètres je sais récupérer le handle de la fenêtre appelante mais c'est la seule info relative à l'appli appelante que l'on m'envoie)

  4. #24
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 408
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 408
    Par défaut
    Je n'ai pas vraiment assez d'info, là.
    Mais le problème pourrait être dû aux Common Controls.

    Essaie en rajoutant un appel à InitCommonControlsEx() (déclaré dans commctrl32.h, implémenté dans comctl32.dll et importé par comctl32.lib) avant de créer la boîte de dialogue...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #25
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2007
    Messages : 13
    Par défaut
    Médinoc, je pense que l'idée de mémoriser le HMODULE est bonne. Le soucis c'est que chez moi il n'est pas connu dans la fonction qui fait le DialogBox() comme cela semble être le cas chez toi.

    Je dois préciser une chose :
    La Dll que j'ai créée est appelée plusieurs fois avant l'appel qui doit demander l'affichage de l'écran et elle est libérée (FreeLibrary) à chaque appel, cela a t-il une influence ?

  6. #26
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 408
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 408
    Par défaut
    Ça ne devrait pas en avoir une.
    Pour le problème de la mémorisation, le HMODULE doit être une variable globale dans la DLL.
    Là, je l'ai déclaré static car s'était dans le même source, mais sinon, tu peux en faire une variable globale pour toute la DLL...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  7. #27
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2007
    Messages : 13
    Par défaut c'est mieux
    C'est bon en faisant comme ça j'arrive à afficher l'écran .
    L'ennui c'est lorsque je redonne la main à l'appli : j'ai un "Access Violation" mais je vais regarder de plus près.

    Merci, Médinoc et Mat.M vous avez carrément fait avancé le schmilblic !!!

  8. #28
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2007
    Messages : 13
    Par défaut Question subsidiaire
    C'est bon en faisant un Destroywindow() j'arrive à ce que je voulais et ça ne plante pas.
    Ce que j'aimerais savoir c'est comment récupérer les infos saisies dans la fenêtre que j'affiche. Je les récupère sans problème dans la méthode MainProc () qui gère la fenêtre, mais quelle est la solution pour les récupérer au niveau de la fonction qui fait le DialogBox() (Variable globales ?).

  9. #29
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 408
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 408
    Par défaut
    Typiquement, tu peux passer un pointeur à ta boîte de dialogue avec DialogBoxParam().
    Tu peux utiliser GetWindowLongPtr() et SetWindowLongPtr() avec l'index DWLP_USER pour garder ce pointeur en mémoire dans la boîte de dialogue.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  10. #30
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2007
    Messages : 13
    Par défaut C'est tout bon
    Merci à ceux qui m'ont aidé.

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Réponses: 5
    Dernier message: 25/05/2012, 10h41
  2. Créer un fond d'écran avec plusieurs clips (images)
    Par arnaud_verlaine dans le forum Flash
    Réponses: 3
    Dernier message: 29/08/2006, 11h45
  3. Réponses: 3
    Dernier message: 21/09/2003, 15h52
  4. créer un noeuds avec des paramétres
    Par Toxine77 dans le forum XMLRAD
    Réponses: 5
    Dernier message: 21/01/2003, 16h11
  5. [CR] Est il possible de créer des univers avec Seagate Info?
    Par Frank dans le forum SAP Crystal Reports
    Réponses: 1
    Dernier message: 27/06/2002, 15h22

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