[PR]

ウィンドウサイズ変更矢印の方向を制限する

戻る

 ウィンドウサイズ変更矢印の方向を制限するには、メッセージ WM_NCHITTEST を処理する。
 ウィンドウサイズ変更の矢印が現れるのは、ウィンドウの右端, 左端, 上端, 下端, 右上隅, 左上隅, 右下隅, 左下隅の8カ所。
 横方向へのサイズ変更矢印を禁止する場合は、右端, 左端での左右矢印を禁止し、右上隅, 左上隅, 右下隅, 左下隅での斜め矢印を縦矢印に変更する。
 縦方向へのサイズ変更矢印を禁止する場合は、上端, 下端での上下矢印を禁止し、右上隅, 左上隅, 右下隅, 左下隅での斜め矢印を横矢印に変更する。

例:

// 横方向へのサイズ変更を禁止する例です。
LRESULT APIENTRY WindowProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam )
{
	// サイズ変更矢印の制限ルール一覧
	static const struct 
		{
			LRESULT from; // 変換元
			LRESULT to;   // 変換先
		}
	trans[] = 
		{
			{ HTLEFT,        HTBORDER }, // 左端の左右矢印 → 矢印なし
			{ HTRIGHT,       HTBORDER }, // 右端の左右矢印 → 矢印なし
			{ HTTOPLEFT,     HTTOP    }, // 左上隅の斜め矢印 → 縦矢印
			{ HTTOPRIGHT,    HTTOP    }, // 右上隅の斜め矢印 → 縦矢印
			{ HTBOTTOMLEFT,  HTBOTTOM }, // 左下隅の斜め矢印 → 縦矢印
			{ HTBOTTOMRIGHT, HTBOTTOM }, // 右下隅の斜め矢印 → 縦矢印
		};

	// UINT uMsg; は、ウィンドウに送られてきたメッセージの値
	switch( uMsg )
	{
		case WM_NCHITTEST:
		{
			LRESULT lResult; // カーソル位置判定結果

			// 変換一覧にあれば変換した値を返す。
			lResult = DefWindowProc( hWnd, uMsg, wParam, lParam );
			{for( int i = 0; i < numof(trans); ++i )
			{
				if ( lResult == trans[ i ].from )
				{
					return trans[ i ].to;
				}
			}}
			return lResult;
		}

	…… 省略 ……

}//WindowProc

関連

ウィンドウのサイズを制限する
クライアント領域を掴んでウィンドウを移動する


Google
ご意見・ご感想をお聞かせ下さい。匿名で送信できます。

 * 返信が必要な場合には postmaster@katsura-kotonoha.sakura.ne.jp へ直接メールしてください。

水無瀬 優 postmaster@katsura-kotonoha.sakura.ne.jp
IDGは全世界85カ国でIT関連雑誌を発行する出版社です。