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 ;
}