2000/01/10 - マウス関連のバグ

ある 2 つのビューがあり,A はマウスのクリックでマウスをキャプチャーする。B はフォーカスがなくなった時にダイアログを出すとする。(B にエディットボックスがあり,そこで編集を行うが,フォーカスがなくなったら値チェックを行う,など。もっと分かりやすい例は後で。)

ここで,B で編集をし,そのまま A をクリックするとどうなるかという問題である。この場合,

  • B のフォーカスが失われる
  • ダイアログが出現し,OK ボタンを押す
  • A に WM_LBUTTONDOWN メッセージが来て,マウスがキャプチャーされる

という具合になるのだが,ここで問題が生じる。A の WM_LBUTTONUP が呼ばれないのだ。よってマウスのリリースができず,困った状況になる。で,解決するために結構悩んだんだが,そういえばエクスプローラも同じ事をやっている。以下の手順で試してみて欲しい。

  • ツリービューでフォルダ名を編集し,* とかにする
  • 編集中のままリストビューをクリック
  • エラーが出るので,OK。

さて,どうなっただろうか。答えは「マウスボタンは離しているのにラバーバンドが現れる」だ。なあんだ。エクスプローラもできてないのか。

もう 1 つエクスプローラの問題。同様に

  • リストビューでファイル名を編集し,* とかにする
  • 編集中のまま真ん中の境界線をクリックし,素早くサイズ変更
  • エラーが出るので,OK。

さて,今度はどうなっただろうか。境界を右に動かした方はリストビューが欠けてしまい,逆に左に動かした方は白い変な領域ができたと思う。これは誰も気付かなかったバグなのか,それとも対応不可能なバグなのか。ちなみに私が試したのは Win98 だけなので他ではどうなるか分からない。

#後で試したところ,NT も同様だった。

コメントする