其实也可以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()