





Intel OpenCV window_w32.cpp
ウィンドウが生成される数が決まっていないので、リストというデータ構造を使っている。
CvWindow構造体には、ウィンドウの名前や、ウィンドウハンドルなどが含まれる。
また、各ウィンドウが前後のCvWindowのアドレスを保持するため、ウィンドウ名からウィンドウハンドルを取得したりすることが可能となっている。
→ データ構造/リスト(※)
→ CvTrackbar
typedef struct CvWindow
{
int signature; // cvNamedWindowでウィンドウが作成されたかどうか
HWND hwnd; // ウィンドウハンドル(子ウィンドウ、表示部)
char* name; // ウィンドウ
CvWindow* prev; // 前のCvWindow※
CvWindow* next; // 次のCvWindow※
HWND frame; // ウィンドウハンドル(親ウィンドウ)
HDC dc; // デバイスコンテクストハンドル
HGDIOBJ image; // オブジェクトハンドル
int last_key; // 最後にキーボードから入力されたキー
int flags; // ウィンドウプロパティー。ウィンドウサイズを画像サイズに合わせて変更するかどうか。
CvMouseCallback on_mouse; // マウスイベント
void* on_mouse_param; // マウスコールバック関数にわたされるユーザー定義変数
struct
{
HWND toolbar; // ウィンドウハンドル(子ウィンドウ、トラックバー)
int pos; // トラックバーの位置
int rows; // トラックバー数
WNDPROC toolBarProc; // ツールバーのウィンドウプロシージャ
CvTrackbar* first; // トラックバー(先頭)
}
toolbar;
} CvWindow;
a) frame
b) toolbar
c) hwnd
frame, toolbar, hwndは上のソースに対応
b)に相当するのがツールバー。OpenCVではここにはトラックバーしかこない。
ちなみに左の画像は、OpenCVのピラミッドセグメンテーションのサンプルプログラムを動かしたもの