关于EVC4.0开发ATL ActiveX的问题

WeirdGuy 2009-04-10 01:06:04
我用ATL开发了ActiveX控件,直接在模拟器运行

class ATL_NO_VTABLE CMainObject :
public CComObjectRootEx<CComMultiThreadModel>,
public CComCoClass<CMainObject, &CLSID_MainObject>,
public IDispatchImpl<IMainObject, &IID_IMainObject, &LIBID_TSMOBILEOBJECTLib>,
public CComControl<CMainObject>,
public IViewObjectExImpl<CMainObject>,
public IOleControlImpl<CMainObject>,
public IOleObjectImpl<CMainObject>,
public IOleInPlaceActiveObjectImpl<CMainObject>,
public IOleInPlaceObjectWindowlessImpl<CMainObject>,
public IObjectSafetyImpl<CMainObject,INTERFACESAFE_FOR_UNTRUSTED_CALLER | INTERFACESAFE_FOR_UNTRUSTED_DATA>


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<CMainObject>)
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的,没有这个问题,各位大哥遇到同样问题没有。
...全文
137 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
WeirdGuy 2009-04-13
  • 打赏
  • 举报
回复
是不是发错版了,应该发到Mobile社区去??难道没有人在CE下开发过ActiveX??
WeirdGuy 2009-04-13
  • 打赏
  • 举报
回复
我跟踪了一下,是刷新IE的时候根本没执行到HRESULT OnDraw(ATL_DRAWINFO& di)这里面来,只有IE初始化的时候执行了,晕死了
91program 2009-04-11
  • 打赏
  • 举报
回复
没有用过ATL,路过
WeirdGuy 2009-04-10
  • 打赏
  • 举报
回复
我也说不清楚,就是很奇怪,郁闷了两天了,没人帮忙么
zjh824 2009-04-10
  • 打赏
  • 举报
回复
看来wince和windows有差别的地方还真是不少.
IOleInPlaceObjectWindowless,会不会是windowless的问题.
没有写过wince的active控件,只能乱猜.

19,519

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
  • 嵌入开发(WinCE)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧