1

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

我尝试了 spy++,它显示所有键盘事件WM_KEYDOWNWM_CHARWM_KEYUP都由编辑控件处理。

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

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

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

我尝试使用SetWindowPos更改 ICustEdit 的大小和位置,但它不起作用(控件变得不可见:))。

所以总结一下,我有两个问题,

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

1 回答 1

3

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

每当您的自定义控件获得焦点(在消息上)时,您应该调用DisableAccelerators()defined in 。custcont.hWM_GOTFOCUS

这就是为什么ICustEdit确实有效,它在内部调用它。

于 2013-10-25T07:43:33.347 回答