FAQ VC++ et MFCConsultez toutes les FAQ

Nombre d'auteurs : 20, nombre de questions : 546, dernière mise à jour : 5 avril 2013  Ajouter une question

 

Cette faq a été réalisée pour répondre aux questions les plus fréquement posées sur le forum Développement Visual C++

Je tiens à souligner que cette faq ne garantit en aucun cas que les informations qu'elle contient sont correctes ; Les auteurs font le maximum, mais l'erreur est humaine. Si vous trouvez une erreur, ou si vous souhaitez devenir redacteur, lisez ceci.

Sur ce, je vous souhaite une bonne lecture. Farscape


SommaireContrôlesActiveX (3)
précédent sommaire suivant
 

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 menufile.
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.

Mis à jour le 5 avril 2013 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

Code c++ : Sélectionner tout
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
28
29
30
31
32
33
34
  
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(); 
    } 
}

Mis à jour le 5 avril 2013 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 :

Code c++ : Sélectionner tout
1
2
3
4
5
6
7
8
9
  
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:

Code c++ : Sélectionner tout
1
2
3
4
5
6
7
  
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

Exemple:

Mis à jour le 5 avril 2013 farscape

Proposer une nouvelle réponse sur la FAQ

Ce n'est pas l'endroit pour poser des questions, allez plutôt sur le forum de la rubrique pour ça


Réponse à la question

Liens sous la question
précédent sommaire suivant
 

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 © 2017 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et 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++