2011-07-25 14 views
1

これを私のサンドボックスMFCアプリケーションの1つでテストし、この結果を確認しました。MFC編集可能なコンボボックスは、単独でテキストを選択します。これをしたくない

編集可能なコンボボックスでアイテムが選択された場合、次回にコンボボックスがウィンドウの変更メッセージを受信すると、すべてのテキストを選択するテキストウィンドウの選択メッセージが送信されます。

編集可能なコンボボックスで編集からウィンドウテキストを取得して選択することは信頼性が低いため、代わりにアイテムを追加してコンボボックスのテキストを変更して、ユーザーがアイテムを選択するのと同じように反応します。次回、すべてが移動で再計算されると、SetWindowPosによって編集テキストが選択されます。

WindowPosChangingメッセージをオーバーライドすると、実際にはコンボボックスの高さの設定が無視されるため、奇妙な結果になります。高さの値では、高さを(フォントのサイズに基づいて)計算する値を減算し、ドロップダウンリストボックスの高さには余りを使用します。なぜドロップダウンの高さが設定されていないのかは私にはわかりません。

私が考えることができる唯一のことは、seltextメッセージを無効にし、フラグが設定されている場合は何もしないメンバーフラグを持つことですが、それは恐ろしい解決です。

テキスト選択を防止する方法についてのアドバイスはありますか?

+0

正確に何をしたいですか?あなたはコンボボックスをサブクラス化したいですか? – Ajay

+0

私は既にコンボボックスのサブクラス化を試みました。動作しません。私は送信されたセッセルメッセージを傍受することはできません。それはちょうど私がsetwindowposメッセージを受け取った後に起こります。どのように、なぜこれが起こるのかに関する文書はありません。 –

+0

スクリーンショットがあります。 – Ajay

答えて

0

これは簡単です。コンボボックスではなく、コンボボックスで所有されている編集ボックスをサブクラス化する必要があります。 Markが言ったように、GetComboBoxInfoを呼び出し、hwndItemフィールドを使用して、これを取得できます。 EM_SETSELをインターセプトできます。

関連する問題