APIを使用して三角形のウインドウを作成
APIでウインドウを作成する、簡単な例としてAPIを使用して三角形のウインドウを作ってみました。
このようにして、色々な形をしたウインドウを作成することが出来ます。
#include < windows.h >
//
// ウインドウ・プロシジャー
//
LRESULT CALLBACK WndProc( HWND hWnd, UINT uMessage,
WPARAM wParam, LPARAM lParam )
{
static POINT ptTriangle[3] = {
{ 160, 0 },
{ 320, 320 },
{ 0, 320 },
} ;
INT ptnArea[1] = { 3 };
HRGN hRgn;
switch( uMessage ) {
case WM_SHOWWINDOW:
//連続した閉じた多角形からなるリージョンを作成
hRgn = CreatePolyPolygonRgn( ptTriangle, ptnArea, 1, WINDING );
//ウィンドウのウィンドウ リージョンを設定
SetWindowRgn( hWnd, hRgn, false );
break;
case WM_LBUTTONUP: //画面をクリックするとプログラムが終了するように設定
case WM_RBUTTONUP:
case WM_DESTROY:
PostQuitMessage( 0 );
break ;
default:
return DefWindowProc( hWnd, uMessage, wParam, lParam ) ;
}
return 0 ;
}
//
// WinMain
//
int APIENTRY WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )
{
MSG msg;
HWND hWnd;
WNDCLASS wc;
// WNDCLASSの登録
memset( &wc, 0, sizeof wc );
wc.style = (UINT)NULL;
wc.lpfnWndProc = (WNDPROC)WndProc;
wc.cbClsExtra = 0;
wc.hInstance = hInstance;
wc.hCursor = LoadCursor( NULL, IDC_ARROW );
wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
wc.lpszMenuName = NULL;
wc.lpszClassName = "WNDCLASS";
RegisterClass(&wc);
// Windowを作成
hWnd = CreateWindowEx(NULL,
"WNDCLASS",
NULL,
WS_POPUPWINDOW | WS_CAPTION, //ポップアップウインドウを指定
0, 0, 320, 320, //表示位置と大きさは、必ず指定
NULL,
NULL,
hInstance,
NULL);
// Windowを表示
ShowWindow( hWnd, nCmdShow );
// メッセージ・ループ
while( GetMessage(&msg, NULL, 0, 0) ) {
//仮想キーメッセージを文字メッセージに変換
TranslateMessage( &msg );
//ウィンドウプロシージャにメッセージをディスパッチ (送出)
DispatchMessage( &msg );
}
return msg.wParam ;
}