<リージョン> まず最初に思いついたのは、変形フォームを作ることでした。 カラー作成ソフトなので、パレットのような形にしようと思ったのですが、 結果的にパレットには見えないようです。 スライドバー、エディットボックスなど、必要なものを隙間無く載せた状態での必要最小限 のフォームの大きさを計算してみると、2つの長方形を作成し、大きな長方形から小さい長方形 を除いたあのような形になりました。実際のプログラミング方法は、ウィンドウプロシージャで WM_CREATE メッセージがきたときに、以下のような処理をします。 static HRGN hrgn, hrgn1, hrgn2; switch (msg) { case WM_CREATE: hrgn = CreateRectRgn(0, 0, 1, 1); hrgn1 = CreateRectRgn(0, 0, 234, 110); hrgn2 = CreateRectRgn(104, 32, 234, 51); CombineRgn(hrgn, hrgn1, hrgn2, RGN_DIFF); SetWindowRgn(hWnd, hrgn, TRUE); CreateRectRgn で2つの長方形を作成し、CombineRgn で組み合わせ、 SetWindowRgn でウィンドウにあてはめます。各関数のプロトタイプは以下のようになります。 HRGN CreateRectRgn(int nLeftRect, int nTopRect, int nRightRect, int nBottomRect); int CombineRgn(HRGN hrgnDest, HRGN hrgnSrc1, HRGN hrgnSrc2, int fnCombineMode); int SetWindowRgn(HWND hWnd, HRGN hRgn, BOOL bRedraw); CombineRgn の fnCombineMode には組み合わせ方法として次の5つのうち どれかを指定できます。
上記の通り、その差をフォームにする場合には、第4引数に RGN_DIFF を使用します。 今回私が作成したのはかなり単純なものですが、これを利用すればもっと複雑な形を フォームにすることができます。 |
Copyright (c) 2003-2004 HIDEKAZU KAJIURA. All Rights Reserved. |