IServiceProvider with CAxWindow, how?
Hi,
I'm hosting a browser control with CAxWindow. It's a window with
WS_OVERLAPPEDWINDOW style. I needed to trap the javascript window.resizeBy
call and resize my popup window accordingly. Therefore I need to implement
IHTMLOMWindowServices. Here is what I come up with:
class CPopupWnd:
public CWindowImpl<CPopupWnd, CAxWindow>,
public IServiceProviderImpl<CPopupWnd>,
public IHTMLOMWindowServices
{
public:
BEGIN_SERVICE_MAP(CPopupWnd)
SERVICE_ENTRY(SID_SHTMLOMWindowServices)
END_SERVICE_MAP()
void Init() // called after window creation
{
IObjectWithSite *pOWS = NULL;
QueryHost(IID_IObjectWithSite, (void**)&pOWS);
pOWS->SetSite((IServiceProvider*)this);
}
......
};
This is not a COM class, so I put "return 0;" in both AddRef and Release. In
QueryInterface, I simply put "return S_OK;".
As I understand that CAxWindow implements IObjectWithSite. Therefore I can
just call SetSite and cast IServiceProvider* to redirect
CAxWindow's IServiceProvider call to my class.
But this isn't happening. Both QueryHost and SetSite returned S_OK. But my
IHTMLOMWindowServices implementation methods like resizeBy aren't getting
called.
How do I tell CAxWindow to use IServiceProvider and the service map defined
in my class?
Thanks in Advance,
He Shiming