基于Vertex的表情镜像的max工具脚本-《DotNet-UI篇1-1》

本文详细介绍了使用DotNet进行GUI封装的方法,通过具体实例展示了如何创建按钮并设置其属性,如大小、位置及点击事件处理。同时,文章还涵盖了如何在主窗口中添加控件,并设置了关闭事件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

其实也可以MS和DotNet配合一起做GUI部分,只是我偏重DotNet,于是有了下面的

(
	----------------------DotNetButton 简单封装----------------------data:width height posX posY
	struct ButtonUtility
	(
		fn CreateButton btnName data = --func=
		(
			local _button = dotNetObject "System.windows.forms.button"
			_button.text = btnName
			_button.size = dotNetObject "System.Drawing.Size" data[1] data[2]
			_button.location = dotNetObject "System.Drawing.Point" data[3] data[4]
-- 			dotNet.addEventHandler _button "click" func
			_button
		)
		
	)
	Struct ButtonClass
	(
		BtnName,
		Data,
-- 		ClickFn,
		Btn = ButtonUtility.CreateButton BtnName Data --ClickFn
	)
	----------------------DotNet 封装----------------------
	struct ToolUtility
	(
		undefined
	)
	fn CloseMainForm =
	(
		gc()
	)
	
	fn ResetXFormToPolyBtnClick = 
	(
		print("ResetXFormToPolyBtn")
	)
	
	fn GetSampleBtnClick sender event = 
	(
		if(event.Button == event.Button.Left) then
			print("GetSampleBtnClick 一起嘿嘿嘿")
		else if(event.Button == event.Button.Right) then
			print("GetSampleBtnClick 一起鼓鼓掌")
		else if(event.Button == event.Button.Middle) then
			print("GetSampleBtnClick 一起哞哞哞")
	)
	
	fn MirrorVertexBtnClick sender event = 
	(
		print("MirrorVertexBtnClick")
	)
	
	fn GetLocalSampleBtnClick = 
	(
		print("GetLocalSampleBtnClick")
	)
	
	fn MirrorLocalVertexBtnClick = 
	(
		print("MirrorLocalVertexBtnClick")
	)

	------------------------------------------GUI部分------------------------------------------
	local mainForm = dotNetObject "System.Windows.Forms.Form"
	mainForm.text = "Vertex Mirror"
	mainForm.size = dotNetObject "System.Drawing.Size" 180 320
	
	--local ResetXFormToPolyBtn = (ButtonClass "A" #(160,50,2,2) ResetXFormToPolyBtnClick).Btn
	local ResetXFormToPolyBtn = (ButtonClass "ResetXFormToPoly" #(160,24,2,2)).Btn
	local GetSampleBtn = (ButtonClass "GetSample" #(160,48,2,26)).Btn
	local MirrorVertexBtn = (ButtonClass "MirrorVertex" #(160,48,2,76)).Btn
	local GetLocalSampleBtn = (ButtonClass "GetLocalSample" #(160,48,2,126)).Btn
	local MirrorLocalVertexBtn = (ButtonClass "MirrorLocalVertex" #(160,48,2,176)).Btn
		
	mainForm.controls.add ResetXFormToPolyBtn
	mainForm.controls.add GetSampleBtn
	mainForm.controls.add MirrorVertexBtn
	mainForm.controls.add GetLocalSampleBtn
	mainForm.controls.add MirrorLocalVertexBtn
	
	dotNet.addEventHandler ResetXFormToPolyBtn "Click" ResetXFormToPolyBtnClick
	dotNet.addEventHandler GetSampleBtn "MouseUp"	GetSampleBtnClick
	dotNet.addEventHandler MirrorVertexBtn "Click"	MirrorVertexBtnClick
	dotNet.addEventHandler GetLocalSampleBtn "Click"	GetLocalSampleBtnClick
	dotNet.addEventHandler MirrorLocalVertexBtn "Click"	MirrorLocalVertexBtnClick
		
	dotNet.addEventHandler mainForm "Closed" CloseMainForm
	
	dotNet.setLifetimeControl ResetXFormToPolyBtn #dotnet
	dotNet.setLifetimeControl GetSampleBtn #dotnet
	dotNet.setLifetimeControl MirrorVertexBtn #dotnet
	dotNet.setLifetimeControl GetLocalSampleBtn #dotnet
	dotNet.setLifetimeControl MirrorLocalVertexBtn #dotnet
	dotNet.setLifetimeControl mainForm #dotnet
	
	
	mainForm.topmost = true  ---与下面效果似乎等价
	mainForm.show()
	--感谢蓬荜生辉提供下面的code,(用于将窗体显示在Max之上)
-- 	local MaxHwndPtr = dotNetObject "System.IntPtr" (Windows.GetMaxHwnd())
-- 	if ((maxVersion())[1]<=1600) then
-- 		mainForm.Show((dotNetObject "MaxCustomControls.Win32HandleWrapper" MaxHwndPtr))
-- 	else
-- 		mainForm.Show((dotNetObject "System.Windows.Forms.NativeWindow").FromHandle MaxHwndPtr)

	
	ok
	------------------------------------------GUI部分------------------------------------------
)
gc()

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值