ある 2 つのビューがあり,A はマウスのクリックでマウスをキャプチャーする。B はフォーカスがなくなった時にダイアログを出すとする。(B にエディットボックスがあり,そこで編集を行うが,フォーカスがなくなったら値チェックを行う,など。もっと分かりやすい例は後で。)
ここで,B で編集をし,そのまま A をクリックするとどうなるかという問題である。この場合,
- B のフォーカスが失われる
- ダイアログが出現し,OK ボタンを押す
- A に WM_LBUTTONDOWN メッセージが来て,マウスがキャプチャーされる
という具合になるのだが,ここで問題が生じる。A の WM_LBUTTONUP が呼ばれないのだ。よってマウスのリリースができず,困った状況になる。で,解決するために結構悩んだんだが,そういえばエクスプローラも同じ事をやっている。以下の手順で試してみて欲しい。
- ツリービューでフォルダ名を編集し,* とかにする
- 編集中のままリストビューをクリック
- エラーが出るので,OK。
さて,どうなっただろうか。答えは「マウスボタンは離しているのにラバーバンドが現れる」だ。なあんだ。エクスプローラもできてないのか。
もう 1 つエクスプローラの問題。同様に
- リストビューでファイル名を編集し,* とかにする
- 編集中のまま真ん中の境界線をクリックし,素早くサイズ変更
- エラーが出るので,OK。
さて,今度はどうなっただろうか。境界を右に動かした方はリストビューが欠けてしまい,逆に左に動かした方は白い変な領域ができたと思う。これは誰も気付かなかったバグなのか,それとも対応不可能なバグなのか。ちなみに私が試したのは Win98 だけなので他ではどうなるか分からない。
#後で試したところ,NT も同様だった。