Toon posts:

[C#] MSHTML event handlers

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hallo,

Ik ben bezig met een WYSIWYG editor in C#. Het is een windows applicatie en dus niet browser-based. Ik gebruik delen van het MSHTML component van Miscrosoft (Interop). Alles werkt perfect. Alleen ik vraag me af hoe ik een event kan afvangen als ik in de Edit mode zit. Ik wil bij het selecteren van bijvoorbeeld een input type een dialog venstertje tonen. Heeft iemand enig idee hoe ik dit moet doen. Heb al de de MSDN site bezocht. Ik heb iets gevonden van IHTMLDocument2::onselectstart, maar aangezien dit C++ is weet ik niet hoe ik dit event kan afvangen met C#. Alvast bedankt als je iets weet wat me verder kan helpen.

Verwijderd

http://msdn.microsoft.com...s/document2/document2.asp

Hier vind je alle members, en daar staan de events ook gewoon bij.

Verwijderd

Topicstarter
Ja inderdaad dit had ik gezien. Wat ik doe is het volgende (fragmentje):
C#:
1
2
3
4
5
6
7
8
[ComVisible(true), Guid("332C4425-26CB-11D0-B483-00C04FD90119"), InterfaceTypeAttribute(ComInterfaceType.InterfaceIsDual)]
public interface IHTMLDocument2 {


[return: MarshalAs(UnmanagedType.Struct)]
            Object GetOnselectstart();

}


Maar hoe kan ik die events eraan toevoegen? Bijvoorbeeld onselectstart ? En kan ik deze dan ook gebruiken als ik in edit mode zit?

[ Voor 8% gewijzigd door Verwijderd op 15-10-2003 16:37 ]


Verwijderd

Topicstarter
Na driftig zoeken heb ik gevonden hoe je je events kan afvangen. Namelijk door een editdesigner toe te voegen en de Events te overriden. Maar als ik op MSDN kijk vind ik alleen onderstaand c++ voorbeeld:
C++:
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
// Error checking omitted for clarity
// Assume m_spWebBrowser is a valid pointer to the IWebBrowser interface
IDispatch* pDisp;
IHTMLDocument2* pDoc;
IServiceProvider* pServProv;
IHTMLEditServices* pEditServ;
IHTMLEditDesigner* pDesigner;

// Get current document in browser
m_spWebBrowser->get_Document(&pDisp);
pDisp->QueryInterface(IID_IHTMLDocument2,
                      (void**)&pDoc);

// Activate Design Mode
pDoc->put_designMode(L"On");

// QI doc for IServiceProvider
pDoc->QueryInterface(IID_IServiceProvider,
                     (void**)&pServProv);

// QS for IHTMLEditServices
pServProv->QueryService(SID_SHTMLEditServices,
                        IID_IHTMLEditServices,
                        (void**)&pEditServ);

// Create an instance of your designer
CoCreateInstance(CSLID_MyDesignerImpl,
                 NULL,
                 NULL,
                 IID_IHTMLEditDesigner,
                 (void**)&pDesigner);

// Add the designer to the editor
pEditServ->AddDesigner(pDesigner);

// Free resources
pDesigner->Release(); // You don't need to save the IHTMLEditDesigner
                      // pointer except for a specific reason
pDisp->Release();
pDoc->Release();
pServProv->Release();
pEditServ->Release();


Nu is mijn c++ kennes niet optimaal, maar ik begrijp wel dat je een service provider moet verkrijgen uit een IHTMLdocument2 interface. Maar in C# bestaat niet iets zoals QueryInterface. Dus hoe moet ik nu mijn Designer toevoegen aan mijn IHTMLDocument2 interface?

[ Voor 3% gewijzigd door Verwijderd op 22-10-2003 10:02 ]