【NX二次开发】C#实现 NX窗口中进度条显示,Winform样式

本文介绍了如何在NX环境中使用C#在Winform中创建一个动态调整大小的进度条,通过引用user32.dll库进行窗口操作,包括设置父窗口、获取窗口大小并实时更新进度条大小。
摘要由CSDN通过智能技术生成

C#实现 NX窗口中进度条显示,Winform样式 ,不说废话,直接上效果图!


在这里插入图片描述


*GIF示例

在这里插入图片描述


正题如下

思路与方法

思路

1.创建Winform窗口或者控件
2.将改窗口设置为NX的子窗口
3.(可选)监听NX窗口的大小变化,一般NX是单线程的,界面基本是卡死状态,所以这个用不太上。

工具

1.任意版本的VS,本实例使用VS2022
2.任意版本NX,本实例使用NX10.0.3.5


1.在nx环境中创建这个进度条的窗口,我这直接使用窗口,而不是控件,因为要设置大小

	public static int Main(string[] args)
	{
		int retValue = 0;
		try
		{
			theProgram = new Program();

			//在这里初始化winform界面
			//你也可以在其他地方,实例化这个界面,
			Application.EnableVisualStyles();
			Application.SetCompatibleTextRenderingDefault(false);
			Application.Run(new ProgressBar_Nx.Form1(UFSession.GetUFSession().Ui.GetDefaultParent()));

			theProgram.Dispose();
		}
		catch (NXOpen.NXException ex)
		{
			// ---- Enter your exception handling code here -----

		}
		return retValue;
	}

2. WinForm内的响应

2.1 dll引用

		[DllImport("user32.dll", SetLastError = true)]
		private static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow);

		[DllImport("user32.dll", SetLastError = true)]
		static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent);

		[DllImport("user32.dll")]
		private static extern int GetWindowRect(IntPtr hwnd, out Rect lpRect);

		public struct Rect
		{
			public int Left;
			public int Top;
			public int Right;
			public int Bottom;
		}

2.2 构造函数与定义的变量

intPtr 是从另一边传值过来的,你也可以使用 UFSession.GetUFSession().Ui.GetDefaultParent() 直接得到NX的句柄

		public IntPtr nx;
		public IntPtr nx2;
		public Rect rect;

		public Form1(IntPtr intPtr)
		{
			InitializeComponent();
			nx = intPtr;
			this.Location = new Point(0, 0);
		}

2.3 窗口Load事件

		private void Form1_Load(object sender, EventArgs e)
		{
			nx2 = FindWindowEx(nx,IntPtr.Zero, "MDIClient", null);
			SetParent(this.Handle, nx2);
		}

这里不一定要放在 MDIClient 里面,你可以放置在NX任意的一个位置,我个人觉得放置在MDI内好看而已!

2.4 窗口大小

我这里使用计时器来更新窗口大小,如果是实际项目中,NX跑循环的化界面应该是卡死状态,我们可以直接设置大小就好了

		private void timer1_Tick(object sender, EventArgs e)
		{
			if (nx2 != IntPtr.Zero)
			{
				GetWindowRect(nx2,out rect);
				this.Size = new Size(rect.Right - rect.Left,30);
			}
		}

项目地址

Github内搜索 ProgressBar_Nx

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值