由于项目需要,我们需要将CATIA嵌入到我们的软件之中,要求在软件启动后,同时调用并启动CATIA软件,并能够屏蔽掉软件自身的菜单和按钮。通过在网上查阅资料,实现了这一功能。

调用并启动CATIA

public string GetCatiaInstallPath()
{// 通过读取注册表,获取CATIA安装路径string keyPath = "CATIA.Analysis\\protocol\\StdFileEditing\\server";RegistryKey key = Registry.ClassesRoot.OpenSubKey(keyPath);return key.GetValue("(默认)");
}[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
public static extern uint SetWindowLong(IntPtr hwnd, int nIndex, uint newLong);[DllImport("user32.dll")]
public static extern int SetParent(IntPtr hWndChild,IntPtr hWndParent);public const int GWL_STYLE = -16;
public const int WS_VISIBLE = 0x10000000;public static void LoadExtApplication(string installPath, IntPtr parentHandle)
{// 启动CATIAProcess process = Process.Start(installPath);process.WaitForInputIdle();// 嵌入到parentHandle指定的句柄中IntPtr appWin = process.MainWindowHandle;SetParent(appWin, parentHandle);SetWindowLong(appWin, GWL_STYLE, WS_VISIBLE);
}

移动CATIA窗体并指定其窗体大小

[DllImport("user32.dll", CharSet = CharSet.Auto)]
public static extern bool MoveWindow(IntPtr hWnd, int x, int y, int nWidth, int nHeight, bool BRePaint);public static void Move(IntPtr appWin, int x, int y, int nWidth, int nHeight)
{if (appWin != null){// 其中x,y为CATIA窗体相对于其父窗体左上角的位置// nWidth为CATIA窗体的宽度,nHeight为CATIA窗体的高度MoveWindow(appWin, x, y, nWidth, nHeight, true);}
}

为了隐藏CATIA顶部的菜单栏,我们只需将y值设为-20即可隐藏掉菜单栏。同时,为了使CATIA窗体能够填满其父窗体,需要指定CATIA窗体的宽度和高度与父窗体保持一致。并且在父窗体大小改变时能够同时调整CATIA窗体的大小。


利用此原理,我们也能够将其他软件嵌入到Winform窗体中,只需按需求调整相应的x,y,nWidth,nHeight的值即可。

【二次开发】将CATIA嵌入到Winform窗体中相关推荐

  1. catia二维图坐标如何表示_【二次开发】CATIA二维图一键标注投影点信息

    原标题:[二次开发]CATIA二维图一键标注投影点信息 CATIA软件不仅可以用来建立三维模型,用它来出二维图纸也是个不错的选择.且相对于传统的铅笔橡皮丁字尺和AutoCAD来说,CATIA二维图中的 ...

  2. 怎样在Winform窗体中嵌入Web浏览器

    背景 项目当中需要在Winform窗体中嵌入网页,虽然微软自带了WebBrowser控件,但是她是以IE模式运行的,兼容性实在太差,找了一圈发现有个叫CefSharp的家伙还不错,于是就拿来玩了一下. ...

  3. C#之如何把子窗体嵌入到主窗体中显示

    C#之如何把子窗体嵌入到主窗体中显示 今天总结一下把子窗体嵌入到主窗体中显示的方法.当你点击一个Button显示子窗体时,往往子窗体都是单独弹出,而如果想要子窗体直接在主窗体上显示,这就需要将子窗体嵌 ...

  4. ArcEngine10.1二次开发错误: 无法嵌入互操作类型,请改用适用的接口

    在之前配置ArcEngine.VS2010二次开发程序的时候,遇见"无法嵌入互操作类型,请改用适用的接口"的错误,在网上查了下,下面引用解决方法. 解决方式为在提示错误的引用上面右 ...

  5. python做abaqus后处理_python进行abaqus后处理的二次开发,我想提取odb文件中的nodeSet,结果总提示Keyerror,请各位大神指教。...

    运行: Cmd中运行:abaqus scrip=plot.py 之所以用python因为abaqus的界面是基于python的,用它来进行批处理或者后处理是比较不错的,希望能和大家分享abaqus的更 ...

  6. WinForm窗体中如何在一个窗体中取到另一个窗体的值

    例如我们定义两窗体,Form1和Form2,如何在Form2中取到Form1中的一个值呢? 解决方法1: 在Form1 中定义一个成员变量,例如public string a = " &qu ...

  7. catia文本时怎么换行_【二次开发】CATIA二维图 环形文字工具

    如何在CATIA Drawing中写上图所示效果的文字? 相信乍一看这个问题,很多英雄好汉还真束手无策. 我们不妨冷静下来简单进行分析:想做这个效果,我们首先要有确定的文字路径,即 圆弧的圆心位置 圆 ...

  8. winform窗体中嵌入显示Excel文件

    最近做的一个项目是C/S结构的,由于客户需要,需要在Winform页面上直接显示Excel文件.对于个人来说,我一直都是在从事B/S结构的项目开发,对于Asp.net很熟悉.但是c/s结构项目的开发还 ...

  9. qt 二次开发 研华daq_在QT项目中添加对研华数采模块的支持

    一.正确安装研华数采模块管理程序Advantech Device Manager,并安装相应模块驱动. 二.将C:\Program Files\Advantech\Adsapi路径(默认安装位置)下的 ...

最新文章

  1. 拥抱AI技术,赋能智慧工业
  2. Cost Function
  3. Web安全1沙箱隔离
  4. 学习Kotlin(五)函数与Lambda表达式
  5. 用“夜间模式”模式(javascript书签)浏览网页
  6. 由奥迪车灯想到的前端动画
  7. 快速搭建实验环境:使用 Terraform 部署 Proxmox 虚拟机
  8. QTextStream
  9. 网络安全2:各种经典渗透方式合集
  10. 单双面打印价格一样吗_正式合同应该打印单面还是双面?
  11. python学习资源分享(编程基础_数据分析_机器学习模型_行业资讯)
  12. 如何测身高未来身高计算机,父母身高测孩子身高公式
  13. 一点浩然气,千里快哉风(修炼孟子浩然之气)
  14. 知识图到文本的生成——拾贰
  15. Android水平仪实训报告,水准仪测量实训报告
  16. 阿里云服务器远程连接和v2ray
  17. android 后台运行 保活
  18. 机器学习(二)-一元线性回归算法(代码实现及数学证明)
  19. 软考网工-关于松弛时间的例题
  20. Azkaban (一) --------- Azkaban 概论

热门文章

  1. 打开Excel出现“The setup controller has encountered a problem during install. Please
  2. html5 简单图片效果,【HTML5】Canvas绘制简单图片教程,
  3. vscode编辑器设置,禁止prettier/禁止Vetur自动格式化HTML代码
  4. 【每日一练】小兔鲜项目-01
  5. wex5萌新使用之 UI2 基础框架一
  6. web前端中快速切换图片实现视频播放效果
  7. 微信小程序开发常用快捷键
  8. Pr 入门教程如何创建颜色溶解过渡?
  9. 程序开发团队---团队精神篇 1
  10. 怎么压缩图片不影响清晰度