1

3ds MAX (2013/2014) のプラグインを作成しています。私のプラグインには、モードレスダイアログと Win32 Edit Controlがあります。エディット コントロールでテキストを編集しようとしたときにダイアログを表示した後、テキストが更新されません。編集キャレットはテキスト ボックスにあります。

spy++ を試してみたところ、すべてのキーボード イベントWM_KEYDOWNWM_CHAR、およびWM_KEYUPが編集コントロールによって処理されていることがわかります。

実はエディット コントロールでキーを押すと、3ds MAX のキーボード ショートカットが有効になります。

ダイアログの種類をModalに変更すると、編集コントロールは完全に機能します。3ds MAX が提供する編集コントロール ( ICustEdit ) は、モードレス ダイアログで正常に機能します。

私のエディット コントロールはカスタマイズされたものです (複数行をサポートし、行数に応じて高さを変更します)、ICustEdit を直接使用することはできません。

SetWindowPosを使用して ICustEdit のサイズと位置を変更しようとしましたが、機能しませんでした (コントロールが見えなくなりました:))。

結論として、2 つの質問があります。

  1. Win32 Edit コントロールが機能しないのはなぜですか?
  2. 通常のエディット コントロールのように、ICustEdit をサブクラス化し、そのサイズと位置をコードから変更する方法はありますか
4

1 に答える 1

3

3dsmax はアクセラレータと呼ばれるものを使用します。これらは、一般的なホットキーのサポートに使用される、アプリケーション全体の低レベルのキーボード オーバーライドです。その結果、カスタム コントロールは、フォーカスを受け取るたびにこれらのオーバーライドを無効にする必要があります。

カスタム コントロールが (メッセージで) フォーカスを取得するたびに、 DisableAccelerators()defined inを呼び出す必要があります。custcont.hWM_GOTFOCUS

これが機能する理由であり、ICustEditこれを内部的に呼び出します。

于 2013-10-25T07:43:33.347 に答える