mmMaxControls : 3dsmax style .NET controls


Lately there were a few posts here about how to achieve a native 3dsmax look for .NET controls.

.NET controls offer much more flexibility than the native MAXScript UI elements, but they often look like strangers in 3dsmax, and don’t always work as expected.

I’ve compiled a library of some common controls that should help bridge that gap. They automatically update according to the 3dsmax UI colors, and self-manage EnableAccelerators.
Also, included are FlyoutButton and FlyoutCheckbutton, for which there is no MAXScript alternative, but are part of the 3dsmax UI.

Check it out here


weird flyout button appear…below attachment of icon i m using, using your code.


Many thanks to you for sharing that, lo!
So far, I only made the simple button. Nice work!

PS: Actually, copy-pasting your sample code result in errors because of the lack of the pictures. Is it possible that you join a fully working test sample (the one in your post is perfect) with all the pictures used in it? Moreover, it will show an example of the kind of pictures to be put in the controls. Great job again!


good job! but there some controls that works not exactly as native max controls.
for example:

spinner doesn’t reset value after pressing Right Button during dragging

spinner’s value should go faster with Control pressed and slower with Alt pressed

when you press on any spinner arrow and not release the value has to continuously increment/decrement

edittext control in max in not using WordWrap mode.

dropdown button should not cause the dialog flickering (dialog loses focus)…

also radiobuttons and checkdoxes are not supported… :wink:

still a lot of work ahead…


… i’m just kidding. honestly i don’t see any reason to make .net controls look like native max controls.


In my code, I am using the setImageStrip method, which takes a row of icons, and parses them as flyout options.
Below is the image I used:

In your case, it is splitting your square bitmap into 4 vertical stripes, which explains that result.

alternatively, you can just set an array of bitmaps into the .images property of the control.


Good point, I’ve added the images to the post.


Will look into it.

Will look into it.

This already happens.

But wouldn’t you prefer it to?

Will look into it.

They’re already very similar to the 3dsmax native controls and the colors easily customizable, I didn’t see a need. If there’s any demand I can add it.

Thanks for the feedback.


hmm… it doesn’t work for me

But wouldn’t you prefer it to?

it’s easy to set it up as you want… maybe the default setting for WordWrap has to be OFF.


@denisT : Btw how to build flyout button like in that Mr.lo Posted using native maxscript and pure dotnet ? which dotnet i should use ? could you gime little example ?

Thanks many ways


no! Mr.Lo will give you all right.


The button is a UserControl, the flyout part is a Form. They’re both fully owner drawn.


ahhhh… too much input…i think my head will blown in second. :banghead: :banghead: , im still in the procces of learning dotNet. but will continue again tommorow. :beer:


Which 3dsmax version? Also, as dotNetControl or dotNetObject?


it’s max 2012/64. i’m using your sample. it happens probably because you show new form and parent form loses focus. try to show the popup form with the SWP_NOACTIVATE flag


Which form? Are we still talking about “# when you press on any spinner arrow and not release the value has to continuously increment/decrement” ?


oops… you was asking about spinners. ok. when i press and hold spinner’s arrows they stop change value (i use your sample)


Mr.Lo could you add this kind of button

its like when you push the arrow button it show you popup menu like, when you press the big button you have last selected picked RC do.

I hope you understand what I mean, sorry being bothering and confusing.


Hmm, interesting. It works for me. It’s implemented internally using a System.Windows.Forms.Timer… I can’t imagine why it would not work on a different setup…



all pressed button labels have to go 1 pixel right and down (the same way as checkbuttons)