|
<リージョン> まず最初に思いついたのは、変形フォームを作ることでした。 カラー作成ソフトなので、パレットのような形にしようと思ったのですが、 結果的にパレットには見えないようです。 スライドバー、エディットボックスなど、必要なものを隙間無く載せた状態での必要最小限 のフォームの大きさを計算してみると、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. |