Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

Vous n'avez pas encore de compte Developpez.com ? L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

Developpez.com

C++

Choisissez la catégorie, puis la rubrique :

logo
Sommaire > Contrôles > ActiveX
        Comment rajouter un ActiveX dans un projet ?
        Comment passer une structure en argument dans une méthode privée sur un ActiveX ?
        Comment mettre une boîte de dialogue dans un ActiveX ?



Comment rajouter un ActiveX dans un projet ?
auteur : Farscape
Il faut d'abord vérifier que l'ActiveX est bien enregistré dans le système en exécutant le programme ActiveX control test container disponible par le menu Tools.
Exécuter ensuite l'option register controls du menu file.
Une boîte de dialogue apparaît avec la liste des contrôles enregistrés avec le chemin d'implantation du composant.

Pour insérer un ActiveX sur le projet en cours procéder comme suit :
Sur le menu Project puis add to project puis components and controls.
Dans la boîte de dialogue visualiser par un double clic le contenu du répertoire : Registered ActiveX Controls.
Sélectionner un ActiveX puis cliquer sur le bouton Insert.
VC générera les wrappers de classe sur les différentes interfaces de l'ActiveX.
L'icône de l'ActiveX sera disponible dans la palette de contrôles dans les ressources.


Comment passer une structure en argument dans une méthode privée sur un ActiveX ?
auteur : Farscape
Les types d'arguments supportés sur une méthode sont des types simples standards :
int, long,double ,LPCTSTR etc?
Dans ce contexte comment faire pour passer en argument un pointeur sur une structure ?
Il suffit d'utiliser le type LPUNKNOWN l'équivalent d'un pointeur void pour les ActiveX .

Exemple d'implémentation sur deux méthodes permettant de passer en argument un pointeur sur une structure LOGFONT

void CMyCtrl::GetLogFont(LPUNKNOWN plogFont) 
{
    // TODO: Add your dispatch handler code here
    LOGFONT lg;
    if(m_pFont)
    {
        m_pFont->GetLogFont(&lg);
        memmove((LOGFONT *)plogFont,&lg,sizeof(lg));
        return;
    }   
    CFontHolder *pHolder=&InternalGetFont();   
    if(pHolder)        
    {        
        CFont *pFont = CFont::FromHandle(pHolder->GetFontHandle());        
        if(pFont)            
        {            
            pFont->GetLogFont(&lg);            
            memmove((LOGFONT *)plogFont,&lg,sizeof(lg));            
        }
    }
}
// ------------------------------------------------------------------
void CMyCtrl::SetLogFont(LPUNKNOWN pLogFont) 
{
    // TODO: Add your dispatch handler code here
    if(m_hWnd!=NULL)
    {
        if(m_pFont) delete m_pFont;
        m_pFont = new CFont;
        m_pFont->CreateFontIndirect((LOGFONT *)pLogFont);
        InvalidateControl();
    }
}

Comment mettre une boîte de dialogue dans un ActiveX ?
auteur : Farscape
Le principe : Générer avec AppWizard un Activex simple.
Créer une boite de dialogue dans les ressources.
Sur le OnCreate du contrôle créer l'objet boîte de dialogue exemple :

int CMyDialogCtrl::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
    if (COleControl::OnCreate(lpCreateStruct) == -1)
        return -1;

    m_MyDialog.Create(IDD_MYDIALOG, this);
    return 0;
}
et sur la fonction OnDraw réajuster la taille en fonction de la surface client:

void CMyDialogCtrl::OnDraw(CDC* pdc, const CRect& rcBounds, const CRect& rcInvalid)
{
   // TODO: Replace the following code with your own drawing code.
    if(m_MyDialog.m_hWnd)
             m_MyDialog.MoveWindow(rcBounds, TRUE);
}
La fonction OnCreate est obtenue en interceptant le message WM_CREATE avec l'aide de ClassWizard.

Options de la boîte de dialogue:

  • style : child
  • border: dialog frame
  • Cocher les options :visible et static edge



Consultez les autres F.A.Q.


Valid XHTML 1.0 TransitionalValid CSS!

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2004 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

Contacter le responsable de la rubrique C++

Partenaire : Hébergement Web