目次 - API(機能別) - ディスプレイとウィンドウ - SDL_SetWindowHitTest

# SDL_SetWindowHitTest

ウィンドウの領域が特別な機能を持っているかを決めるコールバック関数を設定する

## 構文

`int SDL_SetWindowHitTest(SDL_Window* window, SDL_HitTest callback, void* callback_data)`

## 引数

window | 領域判定を設定するウィンドウ
callback | 領域判定のとき呼ばれる関数
callback_data | callback関数に渡されるアプリケーション定義のデータのvoid*

## 戻り値

成功のとき0, 失敗(非対応を含む)のとき-1を戻す. SDL_GetError()で詳細を知ることができる.

## 詳細

callbackの関数プロトタイプは

`SDL_HitTestResult SDL_HitTest(SDL_Window* win, const SDL_Point* area, void* data)`

SDL_HitTestは任意の関数名で, その引数は

win | 領域判定が設定されたウィンドウのSDL_Window
area | 判定する位置のSDL_Point
data | SDL_SetWindowHitTest()関数に渡したcallback_data

通常, ウィンドウはシステムウィンドウマネージャーが提供した装飾(タイトルバー, ウィンドウ枠など)でドラッグやサイズ変更を行う. しかし, 一部のアプリケーションではウィンドウ内部でドラッグしたい場合もある. 例えば, 枠のないウィンドウのあらゆる部分でドラッグしたい場合や, タイトルバーをアプリケーションで描いている場合などである.

この関数は, アプリケーションがウィンドウの特別な領域を決めるためのコールバック関数を設定する. このコールバック関数は, もしウィンドウの特別な領域として扱うためにOSに通知する必要があるとき, イベント処理中に実行される. このコールバック関数で「領域判断」を行う.

特別な領域の場合, マウスによる入力はアプリケーションにはおそらく通知されない. OSは入力をウィンドウの移動やサイズ変更のために使い, アプリケーションには通知しないためである.

コールバックをNULLにすると領域判定は無効になる. デフォルトでは無効である.

この機能に対応していない環境では無条件に-1を戻す. 領域判定を無効にした場合も同様である.

コールバック関数は常に呼ばれる可能性があり, その呼び出しは特定の操作を示すものではない. (例えば, WindowsではOSがウィンドウをドラッグするか否かを決定するときには確実に呼ばれる. しかし, 多くの別の理由でも呼ばれ, その中にはアプリケーションには無意味なものや, 調査した領域には実際にはマウスカーソルがない場合もある.) このコールバック関数は常に呼ばれる可能性があるため, 効率的でメモリの確保などがないようにする必要がある.

## バージョン

SDL 2.0.4以降

## 関連項目(列挙体)

SDL_HitTestResult

## SDL Wikiへのリンク

SDL_SetWindowHitTest - SDL Wiki