Comment obtenir le HWND pour un contrôle ActiveX après que le contrôle ait été initialisé / activé?

StackOverflow https://stackoverflow.com/questions/413425

  •  03-07-2019
  •  | 
  •  

Question

Je crée un contrôle ActiveX basé sur ATL 8.0 en C ++ à l'aide de Visual Studio 2008. Je dois créer une sous-fenêtre et l'associer au contrôle ActiveX.

Comment accéder au HWND appartenant au contrôle ActiveX?

Quelle fonction ATL puis-je remplacer pour pouvoir utiliser le HWND après la création de la fenêtre du contrôle?

Était-ce utile?

La solution 2

Après quelques essais et erreurs et j'ai trouvé la réponse que je recherchais.

Dans le constructeur de votre ActiveX ATL, vous devez ajouter la ligne de code suivante:

m_bWindowOnly = true;

La fenêtre du contrôle est créée (plutôt que de simplement réutiliser le HWND de la fenêtre parent). Ensuite, le membre m_hWnd de la classe de contrôle peut être utilisé pour accéder au HWND de la fenêtre du contrôle.

Autres conseils

ActiveX vous permettrait de définir vos propres méthodes sur votre propre interface (pour traiter l’hypothèse de Brians), mais cela n’aidera probablement pas ici. Le contrôle ActiveX pourrait très bien être créé par un autre composant. ATL n’a pas non plus d’importance - c’est une bibliothèque de modèles C ++ qui englobe les interfaces COM.

La fonction dont vous avez besoin ici est IOleWindow :: GetWindow. Je ne suis pas sûr de comprendre ce que vous entendez par "redéfinir une fonction ATL pour utiliser HWMD". Une fois que vous avez récupéré le HWND, vous pouvez le transmettre à toute fonction utilisant un HWND. Par exemple, en tant que parent dans SetParent (enfant, parent)

[Full Disclosure]: Je ne connais pas très bien ActiveX ou ATL, mais j'espère que cela vous aidera au moins un peu.

Si ActiveX vous permet de définir des méthodes arbitraires sur votre objet, essayez d’exposer une fonction que vous pouvez appeler qui vous renverra simplement la valeur du HWND (le contrôle connaît presque certainement son propre HWND). De cette façon, vous pouvez appeler GetActiveXHwnd () pour obtenir le descripteur nécessaire, que vous utiliserez ensuite pour une manipulation ultérieure.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top