GUST NOTCH? DIARY

Windows 版の OpenCV でダブルクリックイベントが取得できないバグ

わざわざ Yahoo Groups の ML に subscribe してメールを出してみたのだけど、そろそろ丸一日経つというのに自分のメールも含めて一通も来ない。ちゃんと届いているのだろうか?エラーで戻ってきているわけでもないし。
というわけで、ここにも書いておくことにします。
Windows 版の HighGUI 内にバグを見つけました。
window_w32.cpp の、cvInitSystem() 内で、ウィンドウクラスの設定がされていますが、そこでダブルクリックイベントを受けるために必要なフラグが立っていません。ダブルクリックイベントを受けるためには、 WNDCLASS.style に CS_DBLCLKS が含まれている必要があるのですが、これが抜けているのです。そのため、WM_LBUTTONDBLCLK, WM_RBUTTONDBLCLK, WM_MBUTTONDBLCLK のメッセージが検出されることはなく、結果として CV_EVENT_LBUTTONDBLCLK, CV_EVENT_RBUTTONDBLCLK, CV_EVENT_MBUTTONDBLCLK イベントを検出することができません。

具体的には、window_w32.cpp の 208 行目(v2.2のソースの場合)の

wndc.style = CS_OWNDC | CS_VREDRAW | CS_HREDRAW;

wndc.style = CS_OWNDC | CS_VREDRAW | CS_HREDRAW | CS_DBLCLKS;

にする必要があります。
v2.2はライブラリが細分化していて、どれがリンクに必要なのかよくわからなかったので、とりあえず普段使っているv2.1で確認したところ、意図する動作をするようになるのを確認しました。
検索してみても、これで困っている人ってあまりいなかったみたいなんですよね。2件しか見つからなかった。Windows ユーザでダブルクリックを使おうとする人が少ないのでしょうか?まあ、クリックが取れないわけではないから、自分でダブルクリックの判定も書けますしね。実際そうしてたし。
Gtk や Qt ではそちらのライブラリがウィンドウを作るので、この問題は関係ないと思います。多分。確認はしてない。