2012-03-29 8 views
2

Win32/C++。私はDM_SETDEFIDでデフォルトにした複数行編集コントロールと押しボタンを持っています。私がeditに焦点を当ててenterを押すと、押しボタンに移動するのではなく、フォーカスをそこにとどめたい。ダイアログで、エディットコントロールに入力したときに、デフォルトの押しボタンがフォーカスを停止するのを防ぐにはどうすればいいですか?

答えて

2

エディットコントロールは希望に動作を変更するES_WANTRETURN styleを持っている必要があります。

は、ユーザーが ダイアログボックスで複数行エディットコントロールにテキストを入力しながら、 がEnterキーを押したときにキャリッジリターンを挿入することを指定します。このスタイルを指定しない場合は、ENTERキーを押す は、ダイアログボックスのデフォルトのプッシュボタンを押すのと同じ効果があります。 このスタイルは、1行のエディットコントロールには影響しません。

コントロールの作成後にこのスタイルを変更するには、 SetWindowLongを使用します。

+0

私はもっとはっきりしていたはずです。 Enterキーでデフォルトのボタンをトリガーしたいのですが、私は編集コントロールにとどまり、改行を挿入しないようにしたいと思います。 – user1299863

+0

その後、 'ES_WANTRETURN'スタイルは必要ありません。さもなければ、それはコントロールによって食べられたでしょうか?それを通過させ、デフォルトをフォーカスに移してボタンをトリガーさせます。これであなたは 'BN_CLICKED'通知を呼び出し、それを処理します。通知を処理するあなたの仕事をして、 'SetFocus'であなたの編集コントロールにフォーカスを移して完了させることができます。 –

+0

いくつかの編集コントロールがあり、前にボタンを持っていたものにフォーカスを戻したい場合は、状況が煩雑になります。次に、 'EN_KILLFOCUS'通知を聞き、ボタンをクリックする前に最後のものを覚えておきたいかもしれません。または、ボタンコントロールをサブクラス化して、そのコントロールにフォーカスが移動したかどうかを確認するために、そのWM_SETFOCUSを処理することができます。または、Spy ++ツールを使用して見て目的を達成するのに便利な追加のダイアログメッセージが表示されることがあります。 –

関連する問題