ページ

2008年7月18日金曜日

SimpleCap (23)ウィンドウトラッキング(3)

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク

続き)。

単純なトラッキングだとターゲットのウィンドウが下に隠れた場合、ボタン表示だけが残り間抜けな状態になる。

例えば下記の状態で、ウィンドウを下にすると。。


ボタンと点線だけが残ってしまう。


そこでウィンドウトラッキングコード (#updateWindows)の中でウィンドウの表示位置を調べ通常ウィンドウ内で一番上に来ていない場合はボタンを表示しないようにする。

- (BOOL)updateWindows
{
   :
for (i=0; i < CFArrayGetCount(window_list); i++) {
window = CFArrayGetValueAtIndex(window_list, i);
     :
if ([self isWindow:window normalWindow:YES]) {   // 標準的なウィンドウが対象
j++;                      // 順番を取っておく(j=1, 2, 3...)
}
if (window_id == _tracked_window_id) { // ウィンドウリスト内にターゲットウィンドウが見つかった。
       :
if (j == 1) {
[self changeState:STATE_SELECTED];  // j==1すなわち一番上ならボタンを表示に
} else {
[self changeState:STATE_HIDE];    // それ以外はボタンを隠す
}
is_exists = YES;
break;
}
}
CFRelease(window_list);
return is_exists;
}