JavaでWindow制御ってどうやってんの?
ふと疑問に思ったので調べてみました。
仮説としてはWindow制御はOS領域になるので、どこかでnativeメソッドなりを呼び出して管理を任せているはず。
今回はWindowsを対象にしてます。
とりあえず何はともあれ表示
はい。
白背景のWindowを作成して表示することができました。
簡単なんですが、このキャプチャを取る時に予想外の挙動が。
Windows標準のSnipping Toolを使ったところ、表示されていたWindowがどこかへ行ってしまいます。
これもOS側での挙動でしょうか。
APIコールを探して
Win32APIあたりを呼んでそうなnativeメソッドを探してソースコードを読み進めていきます。
これかな?
確認してみたところ以下の順番で参照している模様。
awt.h -> stdhdrs.h -> windows.h -> winuser.h
わかったこと
WindowクラスからComponentクラスを経て、ComponentPeerインターフェイスの各環境向け実装を呼び出し、そこから各環境用のJDK実装を呼び出していることがわかりました。
概ね予想通りの流れでしたが、思っていたより各環境へ合わせるため抽象化は多かったです。
今後の展望
根っこの方の内容は大まかに掴めたはずなので、今度は枝葉の部分として描画処理をやっていきます。