Notifications
Clear all

[Closed] Add ToolTips for MAX built-in tools where they don't set

There are many built-in tools in MAX where most of controls don’t have tooltips. I’m not the user who uses every max tool every day, and I don’t remember how some of them work. So for the person as me it could very helpful to have tooltips as a clue.

Technically it’s possible to add them!

I’m asking the community how good this idea is

4 Replies

Its a good one, and I agree Dennis, all the tools should have tooltips, normally we don’t work with every part of 3ds Max all the time.

I think every control that needs it should have it. It is the best way to have a quick reference, but they should be clear, concise, and descriptive, not as those huge tooltips in the Ribbon.

my idea is to delegate to use make a special file with extra tooltips. something like –

tool(name or id)->control(text or id)->tooltip

i will read this file on system load
using window hooks (similar to what DialogMonitorOPS does do) i will catch a dialog’s popup and find controls by text or id and set specified tooltips on the fly

users can share this tooltip files. it might be interesting

I’ve tried to get existing tooltip messages using sendmessage WM_GETTEXT but with no luck.
What else need to be done to make it work? focus, cursor position?


fn createAssembly = (

	source = ""
	source += "using System;
"
	source += "using System.Runtime.InteropServices;
"
	source += "using System.Text;
"
	source += "class Win32
"
	source += "{
"
	source += " const Int32 WM_GETTEXT = 0xD;
"
	source += "	[DllImport(\"user32.dll\")]
"
	source += "	public static extern int SendMessage(Int32 hWnd, int wMsg, int len, StringBuilder st);
"
	source += " public static string GetText(Int32 hWnd){
"
	source += "		StringBuilder st = new StringBuilder(100);
"
	source += "		SendMessage(hWnd, WM_GETTEXT, 100, st);
"
	source += "		return st.ToString();
"
	source += "}
"
	source += "}
"			

	csharpProvider = dotnetobject "Microsoft.CSharp.CSharpCodeProvider"
	compilerParams = dotnetobject "System.CodeDom.Compiler.CompilerParameters"

	compilerParams.ReferencedAssemblies.Add "System.dll"
	compilerParams.ReferencedAssemblies.Add "System.Drawing.dll"

	compilerParams.GenerateInMemory = true
	compilerResults = csharpProvider.CompileAssemblyFromSource compilerParams #(source)
	
	Win32Assembly = compilerResults.CompiledAssembly
	Win32Assembly.CreateInstance "Win32"
	
	global w32 = dotnetclass "win32"
	
)

createAssembly()