3013|5

47

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

关于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的,没有这个问题,各位大哥遇到同样问题没有。

最新回复

我跟踪了一下,是刷新IE的时候根本没执行到HRESULT OnDraw(ATL_DRAWINFO& di)这里面来,只有IE初始化的时候执行了,晕死了  详情 回复 发表于 2009-4-13 16:41
点赞 关注

回复
举报

70

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
看来wince和windows有差别的地方还真是不少.
IOleInPlaceObjectWindowless,会不会是windowless的问题.
没有写过wince的active控件,只能乱猜.
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
我也说不清楚,就是很奇怪,郁闷了两天了,没人帮忙么
 
 
 

回复

58

帖子

0

TA的资源

一粒金砂(初级)

4
 
没有用过ATL,路过
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(中级)

5
 
是不是发错版了,应该发到Mobile社区去??难道没有人在CE下开发过ActiveX??
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

6
 
我跟踪了一下,是刷新IE的时候根本没执行到HRESULT OnDraw(ATL_DRAWINFO& di)这里面来,只有IE初始化的时候执行了,晕死了
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表