Ajouter des boutons à une appli externe

Résolu
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 à 00:42
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 ^^ :-)

2 réponses

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
19 déc. 2011 à 09:34
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++
3
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
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;
          }         
          
}



0
Rejoignez-nous