Como faço para obter o HWND para um controle ActiveX após o controle foi inicializado / ativado?

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

  •  03-07-2019
  •  | 
  •  

Pergunta

Estou criando um ATL 8.0 controlo ActiveX baseada em C ++ usando Visual Studio 2008. Eu preciso para criar uma sub-janela e anexá-lo para o controle ActiveX.

Como posso ter acesso ao HWND que é de propriedade do controle ActiveX?

função que ATL posso substituir, a fim de usar o HWND após a janela do controle foi criado?

Foi útil?

Solução 2

Depois de alguma tentativa e erro e eu encontrei a resposta que eu estava procurando.

No construtor do seu ActiveX ATL controlar você adicione a seguinte linha de código:

m_bWindowOnly = true;

Isso faz com que a janela para o controle a ser criado (em vez de apenas reutilizando o HWND da janela pai). Depois disso, o membro m_hWnd da classe de controle pode ser usado para acessar o HWND para a janela do controle.

Outras dicas

ActiveX permitem que você definir seus próprios métodos em sua própria interface (para o endereço Brians suposição), mas que provavelmente não vai ajudar aqui. O controle ActiveX pode muito bem ser criado por outro componente. ATL também é irrelevante -. É uma biblioteca C ++ modelo que wraps COM interfaces de

A função que você precisa aqui é IOleWindow :: GetWindow. Eu não tenho certeza que você entende por "substituir uma função ATL usar o HWMD". Depois de ter recuperado o HWND, você pode passá-lo para qualquer função que usa um HWND. Por exemplo, como o pai em SetParent (filho, pai)

[Full Disclosure]: Eu não sou tão familiarizado com ActiveX ou ATL, mas eu espero que este seja pelo menos um pouco útil

.

Se ActiveX permite que você defina métodos arbitrários em seu objeto, tentar expor uma função que você pode chamar que irá simplesmente devolver o valor do HWND para você (o controle quase certamente conhece a sua própria HWND). Dessa forma, você pode chamar GetActiveXHwnd() para obter o identificador necessário, o que você usaria então para posterior manipulação.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top