CListBoxのLBN_SELCANCELについて質問があります。
CListBoxの発生クラスを作成し
オーナー描画、シングル選択のリストボックスを使用しています。
ClassWizardでLBS_SELCANCELメッセージを追加したのですが、
CListBoxのSetCurSelで選択を解除したときに飛んできません。
LBS_SELCANCELメッセージはどのような場合に飛んでくるのでしょうか?
よろしくお願いします。
環境 Win2000 VC6.0 MFC
「LBS_SELCANCEL」メッセージは「LBN_SELCANCEL」の間違いです。
MSDNには、
「リスト ボックスの現在の選択項目がキャンセルされたとき。」
とあります。
つまり、コンボボックスのダウンリストが開いている状態で、
[Esc]キーを押した、あるいは、よそをクリックするなどして
ダウンリストが閉じられた場合に、LBN_SELCANCELが発生します。
> CListBoxのSetCurSelで選択を解除したときに飛んできません。
>
SetCurSel(-1)をしたということですか?
この時に発生するものではないようです。
sugarさんご返事ありがとうございます。
やはりSetCurSel(-1)の場合はLBN_SELCANCELは発生しないのですね。
選択解除時の処理を別の方法で組み込もうと思います。
ありがとうございました。
>つまり、コンボボックスのダウンリストが開いている状態で、
>[Esc]キーを押した、あるいは、よそをクリックするなどして
>ダウンリストが閉じられた場合に、LBN_SELCANCELが発生します。
コンボボックスではそうですが、リストボックスの場合、
そもそも選択を解除するというユーザー操作が無いような気がします。
(私が知らないだけかな?)
複数選択で1つを解除した時にも発生しませんし…。
dairygoods さんのおっしゃる通りですね、確かにそうです。
リストボックスとコンボボックスを取り違えていたようです。
すみませんでした。
LBN_SELCANCELは、SetCurSel(-1)では発生しないということで
解決しておりますが、気になったのでいろいろ試してみました。
>コンボボックスではそうですが、リストボックスの場合、
>そもそも選択を解除するというユーザー操作が無いような気がします。
と書きましたが、次の操作をするとLBN_SELCANCELが発生します。
1) リストボックス上で左ボタンを押す(放さない)
2) Alt+Tabなどで別のアプリケーションに切り替える
キャンセルというのは、「選択の解除」でなく、
「選択しようとした操作の中止」という意味のようですね。
ただ、LBN_SELCANCELが発生しても選択操作が
自動的にキャンセルされるわけではないようです。
