○テキストボックスの最大化


ダイアログにリソースとして貼り付けられたテキストボックスをウィンドウサイズに合わせて最大化します
ウィンドウサイズを変更された場合においても、テキストボックスを最大化するようにします


▼ウインドウのサイズ変更のメッセージ

ウィンドウサイズが変更されたときに、サイズ変更をプログラムが知る必要があります
サイズ変更をプログラムが知るために WM_SIZING を利用してウィンドウがサイズ変更をされた事を知ることが出来ます



▼ウィンドウのクライアント領域のサイズを取得

WindowsAPIの GetClientRect を使用してウィンドウのクライアント領域の座標を取得します
hDlg はウィンドウのハンドルです

RECT re;
GetClientRect(hDlg,&re);

取得したRECT構造体の、re.right には横幅、re.bottom には高さが返ってきます。



▼テキストボックスのサイズ変更

WindowsAPIの MoveWindow を使用してテキストボックスのサイズを変更します
IDC_EDIT1 はテキストボックスのIDです

MoveWindow(GetDlgItem(hDlg,IDC_EDIT1),0,0,re.right,re.bottom,true);

テキストボックスのサイズを左上の座標 0 , 0 から、ウィンドウの右下 re.right , re.bottom にサイズを変更します



▼テキストボックスの入力可能文字数の取得と変更
デフォルトでは30000になってます

入力可能文字数を取得

i = SendMessage(GetDlgItem(hDlg,IDC_EDIT1),EM_GETLIMITTEXT,0,0);

入力可能文字数を0xFFFFに変更

SendMessage(GetDlgItem(hDlg,IDC_EDIT1),EM_LIMITTEXT,(LPARAM)0xFFFF,0);



■実際のプログラムへ追加



BOOL CALLBACK DlgProc(HWND hDlg,UINT msg,WPARAM wp,LPARAM lp){
	switch (msg){
		case WM_SHOWWINDOW:
			break;
		case WM_PAINT:
			break;
		case WM_SIZING:
			{
				RECT re;
				GetClientRect(hDlg,&re);
				MoveWindow(GetDlgItem(hDlg,IDC_EDIT1),0,0,re.right,re.bottom,true);
			}
			break;
		case WM_COMMAND:
		case WM_CLOSE:
			EndDialog(hDlg,WM_CLOSE);
		break;
	}
	return FALSE;
}

メッセージループにWM_SIZINGを追加して上記のように修正するとウィンドウサイズを変更された場合において、テキストボックスを最大化できます。




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