我正在为3ds MAX编写插件(2013/2014)。在我的插件中,我有一个无模式对话框和一个Win32 编辑控件。在我尝试编辑编辑控件中的文本时显示对话框后,文本未更新。编辑插入符号位于文本框中。
我试过spy ++,它显示所有键盘事件 WM_KEYDOWN , WM_CHAR 和 WM_KEYUP 由编辑控件处理。
实际上当我按下编辑控件中的某个键时,3ds MAX的键盘快捷键被激活。
如果我将对话框类型更改为模态,则编辑控件可以正常工作。 3ds MAX提供的编辑控件( ICustEdit )在无模式对话框中正常工作。
我的编辑控件,是一个自定义控件(它支持多行,它会根据行数重新调整其高度),所以我不能直接使用ICustEdit。
我尝试使用 SetWindowPos 更改ICustEdit的大小和位置,但它无法正常工作(控件无形:) :)。
总而言之,我有两个问题,
答案 0 :(得分:3)
3dsmax使用所谓的加速器。这些是应用程序范围的低级键盘覆盖,用于一般热键支持。因此,任何自定义控件都必须在获得焦点时禁用这些覆盖。
只要您的自定义控件获得焦点(DisableAccelerators()
消息),就应该调用custcont.h
中定义的WM_GOTFOCUS
。
这就是ICustEdit
确实有效的原因,它在内部调用它。