時代は非矩形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ではこんなことをした記憶はないので、何か合法的な手段が他にあるのかも知れない。
まだイベントの処理といった細かいライブラリは書いていない。