Ajouter des boutons à une appli externe [Résolu]

Messages postés
2
Date d'inscription
dimanche 18 décembre 2011
Statut
Membre
Dernière intervention
19 décembre 2011
- - Dernière réponse : pipsforever
Messages postés
2
Date d'inscription
dimanche 18 décembre 2011
Statut
Membre
Dernière intervention
19 décembre 2011
- 19 déc. 2011 à 16:58
Bonjour à tous;

Voilà, je crée une DLL (WINAPI) qui pourrait ajouter des boutons sur une fenêtre externe dont j'aurais récupéré l'handle.
Mon soucis est que lorsque je compile un dll avec un fenêtre principale dans la fonction WIN API, elle met bien un bouton sur la fenêtre du logiciel externe et l'enlève lorsque je quitte la fenêtre crée par la dll.
Si par contre je ne crée pas de fenêtre et et que je j'appelle la fonction de la dll AddButton() et bien il apparait mais disparait aussi vite!

Auriez vous une idée pour que je puisse ajouter des boutons sans avoir à créer de fenêtre principale dans ma dll?

A bientôt les geeks ^^ :-)
Afficher la suite 

2 réponses

Meilleure réponse
Messages postés
21054
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
7 novembre 2014
13
3
Merci
La fenetre de la DLL crée une fonction callback, si tu ne fais pas de fenetre il faut creer une fonction simulant ce callback.

ciao...
BruNews, MVP VC++

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 121 internautes nous ont dit merci ce mois-ci

Commenter la réponse de BruNews
Messages postés
2
Date d'inscription
dimanche 18 décembre 2011
Statut
Membre
Dernière intervention
19 décembre 2011
0
Merci
Hello;

Merci de ton message BruNews;

en fait j'ai réussis sans CallBack ou treah.
Je créer juste mes boutons qui restent enfoncés au clcik et ensuite check leurs status, je renvois un bool.
Dans mon apli externe ça fonctionne parfaitement; voici le code, si tu as une correction ou amélioration à proposer ....

/* Replace "dll.h" with the name of your header */
#include "dll.h"
#include <Windows.h>
#include <CommCtrl.h>
#include "Resources.h"
BOOL APIENTRY DllMain (HINSTANCE hInst ,
                       DWORD reason ,
                       LPVOID reserved)
{
    switch (reason)
    {
      case DLL_PROCESS_ATTACH:
        break;
      case DLL_PROCESS_DETACH:
        break;
      case DLL_THREAD_ATTACH:
        break;
      case DLL_THREAD_DETACH:
        break;
    }
    /* Returns TRUE on success, FALSE on failure */
    return TRUE;
}

///////////////////////////////////////////////////////////
////     DeInitialisation                             /////
///////////////////////////////////////////////////////////
DLLIMPORT int DeinitGui(int Instanc)
{
    SendMessage((HWND)Instanc, WM_DESTROY,0,0);
    return 1;
}
///////////////////////////////////////////////////////////
////     Ajout de bouton                              /////
///////////////////////////////////////////////////////////
DLLIMPORT HMENU AddPushButton(char*texte, int Posx, int Posy, int longueur, int largeur, HWND parent, int ID)
{
          
          HWND boutton =CreateWindowEx(
            WS_EX_OVERLAPPEDWINDOW,
            "BUTTON",
            texte,
            WS_CHILD|WS_VISIBLE|BS_AUTOCHECKBOX|BS_PUSHLIKE|BS_FLAT ,
            Posx,Posy,
            longueur,largeur,
            parent,
            (HMENU)ID,
            GetModuleHandle(NULL),
            NULL);               
        
          if(boutton!=NULL)
          {
             CheckDlgButton(boutton,ID,BST_UNCHECKED);           
             return GetMenu(boutton);
          }
          
}
//////////////////////////////////////////////////////////
DLLIMPORT HMENU AddCheckBox(char*texte, int Posx, int Posy, int longueur, int largeur, HWND parent, int ID)
{
          
          HWND boutton =CreateWindowEx(
            WS_EX_OVERLAPPEDWINDOW,
            "BUTTON",
            texte,
            WS_CHILD|WS_VISIBLE|BS_AUTOCHECKBOX|BS_FLAT ,
            Posx,Posy,
            longueur,largeur,
            parent,
            (HMENU)ID,
            GetModuleHandle(NULL),
            NULL);               
        
          if(boutton!=NULL)
          {
             CheckDlgButton(boutton,ID,BST_UNCHECKED);           
             return GetMenu(boutton);
          }
          
}
////////////////////////////////////////////////////////
DLLIMPORT HWND ProgressBar(int Posx, int Posy, int longueur, int largeur, HWND parent, int start, int end)
{
          
          HWND boutton =CreateWindowEx(
            0, PROGRESS_CLASS, NULL,
      WS_CHILD | WS_VISIBLE ,
            Posx,Posy,
            longueur,largeur,
            parent,
            NULL,
            GetModuleHandle(NULL),
            NULL);               
        
          if(boutton!=NULL)
          {
             SendMessage(boutton, PBM_SETPOS, 0, MAKELPARAM(start, end)) ;          
             return boutton;
          }
          
}

DLLIMPORT void SetProgressBarPos(HWND prog, int value)
{
   SendMessage(prog, PBM_SETRANGE, 0, value) ;
}


///////////////////////////////////////////////////////////
////    Détection de click                            /////
///////////////////////////////////////////////////////////

DLLIMPORT bool ButtonClicked(HWND parent,int ID)
{
          POINT pt;
          HWND surface = WindowFromPoint(pt);
          HMENU id = GetMenu(surface);
         
          
        
          /*if(GetAsyncKeyState(VK_LBUTTON) &&0x8000!=0)
          {
           
           return true;
          }*/
           
            if(IsDlgButtonChecked(parent,ID))
            {
               CheckDlgButton(parent,ID,BST_UNCHECKED); 
               return true;                             
            }
       return false;   
}
///////////////////////////////////////////////////////////
////    Détachement du graphique                      /////
///////////////////////////////////////////////////////////
DLLIMPORT HWND MoveChart(HWND graph,char*texte)
{
    
    HWND newFen = CreateNewWindow(texte);
    if(newFen != NULL && graph!=NULL)
              {
                 SetParent(graph, newFen);
                 SendMessage(GetParent(graph), WM_SYSCOMMAND, SC_MINIMIZE, 0);
                 return newFen;          
              }
    
}

///////////////////////////////////////////////////////////
////    Crée une fenêtre                              /////
///////////////////////////////////////////////////////////
DLLIMPORT HWND CreateNewWindow(char*texte)
{
          
          HWND fenetre =CreateWindowEx(
            WS_EX_OVERLAPPEDWINDOW,
            texte,
            texte,
            WS_OVERLAPPEDWINDOW ,
            CW_USEDEFAULT,CW_USEDEFAULT,
            600,600,
            HWND_DESKTOP,
            NULL,
            GetModuleHandle(NULL),
            NULL);  
            
       if(fenetre!=NULL)
          {
                       
             return fenetre;
          }         
          
}



Commenter la réponse de pipsforever