■ウインドウの位置やサイズを求める。

RECT r;
GetWindowRect(hDlg,&r);


■位置やサイズを求めて、位置やサイズを変更する方法

▼画面いっぱいに自分のウィンドウがひろがります

HWND hDWnd=GetDesktopWindow();//デスクトップのハンドルを取得
RECT r;
GetWindowRect(hDWnd,&r);

int width=(r.right -r.left);
int height=(r.bottom -r.top)-10;
//hDlgは自分のハンドル
SetWindowPos(hDlg,HWND_TOP,r.left ,r.top ,width,height,SWP_SHOWWINDOW);


▼画面中央にウインドウを配置

HWND hDWnd=GetDesktopWindow();//デスクトップのハンドルを取得
RECT desktop_rect;
GetWindowRect(hDWnd,&desktop_rect);
RECT m_rect;
GetWindowRect(hWnd,&m_rect);//hWndは自分のハンドルで自分のウィンドウサイズを求めている

int width=(desktop_rect.right-(m_rect.right-m_rect.left))/2;
int height=(desktop_rect.bottom-(m_rect.bottom-m_rect.top))/2;
//hWndは自分のハンドル
SetWindowPos(hWnd,HWND_TOP,width ,height ,(m_rect.right-m_rect.left),(m_rect.bottom-m_rect.top),SWP_SHOWWINDOW);

// SetWindowPosオプション
// HWND_BOTTOM 他のウィンドウの下に配置
// HWND_NOTOPMOST 最前面の下に配置ただし、もともと最前面である必要有り
// HWND_TOP 最前面に配置
// HWND_TOPMOST 最前面でないウインドウの前に表示


■表示・非表示

▼ウィンドウを非表示にする
ShowWindow(hDlg,SW_HIDE);

▼ウィンドウを表示する
ShowWindow(hDlg,SW_SHOW);


■最小化、最大化

▼ウインドウの最小化
SendMessage(hWnd,WM_SYSCOMMAND,SC_MINIMIZE,NULL);

▼ウインドウの最大化
SendMessage(hWnd,WM_SYSCOMMAND,SC_MAXIMIZE,NULL);

▼サイズを元に戻す
SendMessage(hWnd,WM_SYSCOMMAND,SC_RESTORE,NULL);

▼ウィンドウが最大化されているかどうかを調べる
IsZoomed(hWnd)
最大化されてない場合は0が返る

▼ウィンドウが最小化されているかどうかを調べる
IsIconic(hWnd)
最小化されてない場合は0が返る

▼最大化最小化のメッセージを受け取る
プロシージャに以下を追加する
BOOL CALLBACK DlgProc(HWND hDlg,UINT msg,WPARAM wp,LPARAM lp){
	switch (msg){
		case WM_SHOWWINDOW:
			break;
		case WM_PAINT:
			break;
		case WM_TIMER:
			break;
		case WM_SYSCOMMAND:
			switch(wp)
			{
			case SC_MINIMIZE:
				MessageBox(NULL,"最小化","最小化",0);
				break;
			case SC_MAXIMIZE:
				MessageBox(NULL,"最大化","最大化",0);
				break;
			case SC_RESTORE:
				MessageBox(NULL,"復元","復元",0);
				break;
			}
			break;
		case WM_COMMAND:
		break;
	}
	return FALSE;
}


▲トップページ > Windows と C++