時代は非矩形window


hogeとか書いてあるのがmoshのwindow(タイトルバーとかが無いとレタッチして入れたみたいだ)。cairoでDIBを作ってそれをそのままLayered Windowにしてるので、全体をCairoで書く必要がある。cairoで透けているところはWindowとして穴が空いたようになる。
Win32 GDIは昔取った杵柄ということでそれなりにスムースに出来たが、難しいのはmoshネイティブのObjectがどうやってもキャスト出来ないことで、仕方がないので

LRESULT
toObject(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam){
 return Pair::list4(
 Object::makePointer((void *)hWnd),
 Object::makeFixnum((unsigned int)uMsg),
 Object::makeFixnum((unsigned int)wParam),
 Object::makeBignum((unsigned int)lParam)).val;
}

のように生の値を取り出している。これに気づくのにかなり時間が掛かった。。

return isObjectMessage(pmsg->message) ? Object::makeRaw(l) : Object::False;

skymoshではこんなことをした記憶はないので、何か合法的な手段が他にあるのかも知れない。
まだイベントの処理といった細かいライブラリは書いていない。