3ds MAX插件中的Win32 Edit控件

时间:2013-10-24 10:23:13

标签: winapi 3dsmax

我正在为3ds MAX编写插件(2013/2014)。在我的插件中,我有一个无模式对话框和一个Win32 编辑控件。在我尝试编辑编辑控件中的文本时显示对话框后,文本未更新。编辑插入符号位于文本框中。

我试过spy ++,它显示所有键盘事件 WM_KEYDOWN WM_CHAR WM_KEYUP 由编辑控件处理。

实际上当我按下编辑控件中的某个键时,3ds MAX的键盘快捷键被激活。

如果我将对话框类型更改为模态,则编辑控件可以正常工作。 3ds MAX提供的编辑控件( ICustEdit )在无模式对话框中正常工作。

我的编辑控件,是一个自定义控件(它支持多行,它会根据行数重新调整其高度),所以我不能直接使用ICustEdit。

我尝试使用 SetWindowPos 更改ICustEdit的大小和位置,但它无法正常工作(控件无形:) :)。

总而言之,我有两个问题,

  1. 为什么我的Win32 Edit控件不起作用?
  2. 有没有办法对ICustEdit进行子类化,并从代码中更改其大小和位置,就像普通的编辑控件一样

1 个答案:

答案 0 :(得分:3)

3dsmax使用所谓的加速器。这些是应用程序范围的低级键盘覆盖,用于一般热键支持。因此,任何自定义控件都必须在获得焦点时禁用这些覆盖。

只要您的自定义控件获得焦点(DisableAccelerators()消息),就应该调用custcont.h中定义的WM_GOTFOCUS

这就是ICustEdit确实有效的原因,它在内部调用它。