CATIA二次开发 CAA 对话框 调用 ActiveX 控件 浏览器控件

CATIA 二次开发 CAA 专栏收录该内容
3 篇文章 1 订阅

2011年第一次接触CAA 对CATIA在上学期间接触过一点 直到现在也只是限于画个砖(立方体)或者一个饼(圆柱)的水平。

到目前为止接触的CATIA版本大概有V5 R16 R18 R19 R20 R25 ,3DE R2016x(只会启动软件 做过一个小项目)。一直以来认为CAA是一个被达索(DS)封闭的开发环境,所有的功能实现只能调用它自己的API,而且自己也认为最好是通过它自己的API实现比较靠谱,知道最近我的认识才有所变化------------只要实现需求,什么方法都是好方法,而且CAA是基于组件的应用,也是基于C++的程序,所以实际上程序这东西没那么多限制 这里不知道怎么表达,总之就是那个意思。

       以前,认为CAA中无法调用MFC的东西,其实根本原因是VS在创建MFC Project的时候自动创建了一部分东西我们没注意,所以说其实在一定程度上也是可以使用MFC的。由于项目需要在CAA对话框中使用浏览器控件(跟web应用集成),我的实现经历过几个阶段。

      1、2015年   创建MFC Project 在对话框中添加浏览器控件  然后将该项目做成动态库(dll),然后在CAA对话框需要的地方加载该dll就可以了,这种方法我觉着是挺好的  缺点是加载这个dll后创建的对话框感觉不受CAA命令控制。其实说实话在Window中窗口没有不受控制的 只不过是跟CAA平常的填空式开发有点不同 通过windows的API 结合CAA是可以实现的  但是我懒没有做后面的事。

     2、时间不确定   我自己跟执着与用CAA自己的API实现一系列的响应过程  然后通过webservice的方式与web应用集成。这种方式也可以,但是对于流程一类的东西 还是基于web 网页的方式感觉顺畅一点。

     3、2018年    一个同事做工艺审查相关的研究,他觉得前两种方案都有点别扭 想在CAA对话框中直接嵌入浏览器控件,我也是有段时间没写代码 觉得我可以试试。有两个原因:1、我的认识有所转变,要照以前我肯定觉得不能做;2、同事在网上看到有个哥们在对话框中可以嵌入Media Player觉得好玩,他就找人家交流 结果那哥们要250的报酬,同事刚买房就没搭理他,后来知道另一个同事已经被这哥们坑了100大洋。实现思路有下面几种:

3.1 借用MFC

     3.1.1 创建CAA工程 创建承载浏览器控件的对话框;

     3.1.2 创建MFC  Project 生成浏览器控件类,会生成一个CExplore的类,拷贝.h与.cpp到CAA工程目录;这中间我遇到一个问题是调用这个类的时候 会提示 不是CAA授权的API 一度让我认为CAA无法使用MFC 这就要感谢上面那哥们了 是他让我认为一定是我哪里不对 因为我对MFC不熟啊 之前可以说是没接触过,经过度娘的指导 终于在编译的时候不报错了;

     3.1.3 在CAA对话框中插入控件   这里需要调用CExplore类中的Create方法 其中的pWnd指针就是你要承载控件对话框的指针,通过Windows API可以搞定。这里需要注意的是CAA加载自身对话框的时间问题,由于这个原因坑了我周六一天时间。

3.2 借用CAxWindow,这种方式大概过程如下:

// 引入IE控件,这里的路径为自己计算机上的控件的实际路径
#import "C:\WINNT\system32\...\ieframe.dll"

CoInitialize(NULL);
AtlAxWinInit();

AfxEnableControlContainer();

WinContainer.Create(hdlgPlay, rc, 0,WS_CHILD |WS_VISIBLE);

LPOLESTR pszName=OLESTR("shell.Explorer.2");

WinContainer.CreateControl(pszName);

HRESULT  hr;

hr=WinContainer.QueryControl(__uuidof(IWebBrowser2),(void**)&iWebBrowser);//获取接口

iWebBrowser->Navigate2(url)

3.3 借用duilib,这个目前还没测试 据同事所说是可以的 应为他就是dll,CAA肯定没问题是可以调用dll的。

 

结尾,3.1的方式实现整个过程差不多一个星期左右的时间,因为熬夜还掉了好几根头发。目前还存在一些问题,浏览器控件中点击链接时会弹出ie应用,不能完全在控件中;窗口销毁时,需要额外的销毁ie ,否则在任务管理器中会看到飘着的进程。

 pWebBrowser.Release();
  WinContainer.DestroyWindow();
  PostQuitMessage(0);

参考链接:

https://blog.csdn.net/zhidingguan2875/article/details/53947607

https://blog.csdn.net/nanjun520/article/details/53024503

http://www.cppblog.com/azhisoft/articles/426.html

 

 

  • 1
    点赞
  • 5
    评论
  • 6
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值