Wie bekomme ich das HWND für ein ActiveX-Steuerelement, nachdem die Steuerung initialisiert wurde / aktiviert?

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

  •  03-07-2019
  •  | 
  •  

Frage

Ich erstelle ein ATL 8.0 ActiveX-Steuerelement in C ++ mit Visual Studio 2008. Ich brauche ein Unterfenster erstellen und an das ActiveX-Steuerelement zu befestigen.

Wie erhalte ich Zugriff auf das HWND, die durch das ActiveX-Steuerelement gehört?

Welche ATL-Funktion kann ich, um überschreiben die HWND zu verwenden, nachdem das Fenster des Steuerelements erstellt wurde?

War es hilfreich?

Lösung 2

Nach einigem Versuch und Irrtum, und ich fand die Antwort war ich nach.

Im Konstruktor Ihrer ATL-ActiveX-Steuerelement Sie die folgende Codezeile hinzuzufügen:

m_bWindowOnly = true;

Dies bewirkt, dass das Fenster für das Steuerelement erstellt werden (und nicht nur das HWND des übergeordneten Fensters Wiederverwendung). Danach kann das m_hWnd Mitglied der Steuerklasse verwendet werden, um das HWND des für das Steuerfenster zuzugreifen.

Andere Tipps

ActiveX Sie erlauben würde, Ihre eigenen Methoden auf eigene Schnittstelle zu definieren (Adresse Brians Annahme), aber das wird wahrscheinlich nicht hier helfen. Das ActiveX-Steuerelement könnte sehr gut durch eine andere Komponente erstellt werden. ATL Auch das ist irrelevant -. Es ist eine C ++ Template-Bibliothek, die COM-Schnittstellen wickelt

Die Funktion, die Sie hier brauchen, ist IOleWindow :: GetWindow. Ich bin nicht sicher, was Sie unter „eine ATL-Funktion überschreibt die HWMD zu verwenden“. Sobald Sie das HWND abgerufen haben, können Sie es auf jede Funktion übergeben, die ein HWND verwendet. Zum Beispiel, wie die Eltern in SetParent (Kinder, Eltern)

[Full Disclosure.]: Ich bin nicht so vertraut mit ActiveX oder ATL, aber ich hoffe, dass dies zumindest etwas hilfreich

Wenn ActiveX ermöglicht es Ihnen, beliebige Methoden auf dem Objekt zu definieren, versuchen, eine Funktion zu machen, die man so nennen kann, wird einfach den Wert des HWND an Dich zurück (die Kontrolle an Sicherheit grenzender Wahrscheinlichkeit kennt seine eigene HWND). Auf diese Weise kann GetActiveXHwnd() nennen kannst den notwendigen Griff zu bekommen, die Sie dann zur weiteren Bearbeitung verwenden würden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top