Come posso ottenere l'HWND per un controllo ActiveX dopo che il controllo è stato inizializzato / attivato?

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

  •  03-07-2019
  •  | 
  •  

Domanda

Sto creando un controllo ActiveX basato su ATL 8.0 in C ++ usando Visual Studio 2008. Devo creare una finestra secondaria e collegarla al controllo ActiveX.

Come posso accedere all'HWND di proprietà del controllo ActiveX?

Quale funzione ATL posso ignorare per utilizzare l'HWND dopo aver creato la finestra del controllo?

È stato utile?

Soluzione 2

Dopo qualche prova ed errore e ho trovato la risposta che stavo cercando.

Nel costruttore del controllo ActiveX ATL è necessario aggiungere la seguente riga di codice:

m_bWindowOnly = true;

Ciò provoca la creazione della finestra per il controllo (piuttosto che il semplice riutilizzo dell'HWND della finestra padre). Successivamente, il membro m_hWnd della classe di controllo può essere utilizzato per accedere a HWND per la finestra del controllo.

Altri suggerimenti

ActiveX ti permetterebbe di definire i tuoi metodi sulla tua stessa interfaccia (per rispondere al presupposto di Brians), ma probabilmente questo non ti aiuterà. Il controllo ActiveX potrebbe benissimo essere creato da un altro componente. Anche l'ATL è irrilevante: è una libreria di modelli C ++ che avvolge le interfacce COM.

La funzione che ti serve qui è IOleWindow :: GetWindow. Non sono sicuro di cosa intendi per "sovrascrivere una funzione ATL per utilizzare l'HWMD". Dopo aver recuperato l'HWND, è possibile passarlo a qualsiasi funzione che utilizza un HWND. Ad esempio, come genitore in SetParent (figlio, genitore)

[Full Disclosure]: non ho familiarità con ActiveX o ATL, ma spero che questo sia almeno un po 'utile.

Se ActiveX ti consente di definire metodi arbitrari sul tuo oggetto, prova ad esporre una funzione che puoi chiamare che ti restituirà semplicemente il valore di HWND (il controllo quasi sicuramente conosce il proprio HWND). In questo modo puoi chiamare GetActiveXHwnd () per ottenere l'handle necessario, che useresti per ulteriori manipolazioni.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top