Bonsoir, j'aimerais savoir si quelq'un saurait comment instancier dans une méthode de dll atl une classe implémentant CWindowImpl et ensuite avec une boucle de message récupérer les évènements oncreate,onresize,ondestroy ?
Bonsoir, j'aimerais savoir si quelq'un saurait comment instancier dans une méthode de dll atl une classe implémentant CWindowImpl et ensuite avec une boucle de message récupérer les évènements oncreate,onresize,ondestroy ?
Est ce que vous sauriez ci ce que je voudrais effectuer est au moins possible, svp ?
http://msdn.microsoft.com/library/en-us/vccore/html/_atl_Implementing_a_Window_with_CWindowImpl.asp
yes, c'est effectivement possible
Regarde un peu dans l'MSDN ou dans ton CD MSDN tu as des exemples de VC++ sur ATL...
Bonsoir,
merci pour vos réponses, en fait j'ai déjà parcouru plus ou moins la doc sur le sujet et la msdn. Mon objectif c'est l'écriture d'une classe implémentant CwinowImpl laquelle charge un contrôle WebBrowser, j'appelle ac tuellment une méthode simple de ma dll depuis vbscript qui instancie la classe de fenêtre et... c'est bon la fenêtre et créée. Par contre le point suivant que je veux implémenter c'est le chargement d'une page dans le contrôle browser et la rcupération du code chargé. Pour ça j'ai créé une classe de collecteur d'évènement : CEventSink, je voudrais pouvoir repéré le chargement complet du document, mais pour relier mon collecteur d'évènement à la fenêtre nouvellement créé j'ai un nouveau problème.
Je fais pour cela appel à AtlAxGetControl pour avoir un pointeur d'interface sur le contrôle browser et déjà là ça plante... Voici ma fonction :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64 //générer à la création de la fenetre LRESULT CMainWindow::OnCreate(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) { MessageBox("création de la fen","Messagebox"); HRESULT hr; RECT old; IUnknown * pUnk = NULL; GetClientRect(&old); m_hwndWebBrowser = ::CreateWindow(_T(ATLAXWIN_CLASS), m_URI, /*WS_POPUP|*/WS_CHILD|WS_DISABLED, old.top, old.left, old.right, old.bottom, m_hWnd, NULL, ::GetModuleHandle(NULL), NULL); MessageBox("création de la fen effectuée 1","Messagebox"); //a ce niveau j'ai un plantage!!! hr = AtlAxGetControl(m_hwndWebBrowser, &m_pWebBrowserUnk); MessageBox("création de la fen effectuée 10 ","Messagebox"); if (FAILED(hr)) return 1; MessageBox("création de la fen effectuée 2 ","Messagebox"); if (m_pWebBrowserUnk == NULL) return 1; MessageBox("création de la fen effectuée 3 ","Messagebox"); hr = m_pWebBrowserUnk->QueryInterface(IID_IWebBrowser2, (void**)&m_pWebBrowser); if (FAILED(hr)) return 1; MessageBox("création de la fen effectuée 4 ","Messagebox"); hr = CComObject<CEventSink>::CreateInstance(&m_pEventSink); if (FAILED(hr)) return 1; MessageBox("création de la fen effectuée 5 ","Messagebox"); m_pEventSink->m_pMain = this; MessageBox("création de la fen effectuée 6 ","Messagebox"); hr = AtlAdvise(m_pWebBrowserUnk, m_pEventSink->GetUnknown(), DIID_DWebBrowserEvents2, &m_dwCookie); if (FAILED(hr)) return 1; MessageBox("fin création de la fen","Messagebox"); return 0; }
Partager