关于EVC4.0开发ATL ActiveX的问题
[复制链接]
我用ATL开发了ActiveX控件,直接在模拟器运行
class ATL_NO_VTABLE CMainObject :
public CComObjectRootEx,
public CComCoClass,
public IDispatchImpl,
public CComControl,
public IViewObjectExImpl,
public IOleControlImpl,
public IOleObjectImpl,
public IOleInPlaceActiveObjectImpl,
public IOleInPlaceObjectWindowlessImpl,
public IObjectSafetyImpl
BEGIN_COM_MAP(CMainObject)
COM_INTERFACE_ENTRY(IMainObject)
COM_INTERFACE_ENTRY(IDispatch)
COM_INTERFACE_ENTRY(IViewObjectEx)
COM_INTERFACE_ENTRY(IViewObject2)
COM_INTERFACE_ENTRY(IViewObject)
COM_INTERFACE_ENTRY(IOleInPlaceObjectWindowless)
COM_INTERFACE_ENTRY(IOleInPlaceObject)
COM_INTERFACE_ENTRY2(IOleWindow, IOleInPlaceObjectWindowless)
COM_INTERFACE_ENTRY(IOleInPlaceActiveObject)
COM_INTERFACE_ENTRY(IOleControl)
COM_INTERFACE_ENTRY(IOleObject)
COM_INTERFACE_ENTRY(IObjectSafety)
END_COM_MAP()
BEGIN_CATEGORY_MAP(CMainObject) // 添加脚本安全组件类型
IMPLEMENTED_CATEGORY(CATID_SafeForScripting)
IMPLEMENTED_CATEGORY(CATID_SafeForInitializing)
END_CATEGORY_MAP()
BEGIN_MSG_MAP(CMainObject)
CHAIN_MSG_MAP(CComControl)
DEFAULT_REFLECTION_HANDLER()
END_MSG_MAP()
HRESULT OnDraw(ATL_DRAWINFO& di)
{
m_Rect = *((RECT*)di.prcBounds);
m_hDC = di.hdcDraw;
DrawText(m_hDC, _T("xxxxxxxxxx", -1, &m_Rect, DT_LEFT);
return S_OK;
}
模拟器打开IE访问本地一个HTML文件,用OBJECT标签,第一可以访问,一点问题都没有,IE上显示出了XXXXXX的字符串,
当我刷新一下IE的时候,屏幕上XXXXXXX的字符串消失了,什么都没有了,奇怪的是我任务管理器干掉IE,重新启动IE打开
这个HTML文件,又正常了,结论就是IE打开的时候只能执行一次,刷新IE就无效了,太郁闷了,而且第二次刷新IE的时候
ATL内部工作也正常的,我也跟踪到代码执行到OnDraw里面了,就是IE上没有任何显示。。。。
我也从其他地方调用Invalidate啊FireViewChange啊之类的,都试过,没用。
我后来用VC写同样代码写了PC下的ATL,刷新IE是OK的,没有这个问题,各位大哥遇到同样问题没有。