- 2009-07-17 (金) 17:46
- 技術
●レイヤードウィンドウで行こう.楽だし.
2つの方法で,それぞれ猫型ウィンドウ表示ができましたが,リージョンを使う方法だと,画像を拡大したり反転したりして表示したくなったときの対応方法を考えるのが面倒そうなので,レイヤードウィンドウの方法を採用することにしました.
あと,猫をドラッグで移動させたくなったのですが,自分で
マウス押下されたらウィンドウ移動操作状態に入る → ドラッグ中はマウス移動に合わせてウィンドウ移動さす → マウスボタン離されたらウィンドウ移動操作状態終了
という処理を書くのが面倒なので,ウィンドウプロシージャ内で,
case WM_NCHITTEST:
{ //クライアント領域へのマウスイベントは全てタイトルバーに発生したことにしてしまう.
//利点:左ドラッグでのウィンドウ移動を勝手にやってくれる.
//欠点:クライアント領域へのマウスイベント通知はこなくなる.
LRESULT ret = DefWindowProc( hWnd, message, wParam, lParam );
return ( ret == HTCLIENT ? HTCAPTION : ret );
}
break;
として,ウィンドウの移動はシステム側に勝手にやってもらうようにしました.
(クライアント領域でマウス押下したのに,タイトルバーの上でマウス押下されたことにでっちあげる.)
背景透過しました.右向き猫は左向きの画像をStretchBltで反転描画で使いまわし.
- Newer: ガンプラ大好きプログラマーの気まぐれ技術報告
- Older: ウィンドウ形状を変える3