ページ 11

ウインドウサイズについて

Posted: 2005年12月30日(金) 16:02
by シラフ
RADでウインドウの大きさを(400,400)としても、クライアント領域の大きさは(392,366)となってしまいます。
今作ってるソフトは、これでは困るので、クライアント領域の大きさを(400,400)にするにはどうすればいいのでしょうか?

Posted: 2005年12月30日(金) 17:35
by イグトランス
希望するクライアント領域の大きさからウィンドウ全体の大きさを計算するAdjustWindowRectEx関数があります。

コード: 全て選択

Declare Function AdjustWindowRectEx Lib "user32.dll"  (
	ByRef rc As RECT,
	ByVal dwStyle As DWord,
	bMenu As Long,
	dwExStyle As DWord) As Long
1番目の引数に希望するクライアント領域の大きさが入ったRECT型のデータを渡すと
関数内で計算して必要なウィンドウ全体の大きさをこの引数に返します。
2番目と4番目の引数はウィンドウスタイルと拡張スタイルです。
3番目はメニューがあるかどうかをTRUE/FALSEで指定します。

この関数をCreateイベント内で呼び、MoveWindowで動かせば良いです。
たとえばこんな感じです。

コード: 全て選択

Declare Function SetRect Lib "User32" (
    ByRef rc As RECT, xLeft As Long, yTop As Long, xRight As Long, yBottom As Long) As Long

Sub MainWnd_Create(ByRef cs As CREATESTRUCT)
	Dim rc As RECT
	With cs
		SetRect(rc, .x, .y, 400, 400)
		AdjustWindowRectEx(rc, .style, TRUE, .dwExStyle) ' 仮にメニューを持つウィンドウだとして
	End With
	With rc
		MoveWindow(hMainWnd, .left, .top, .right - .left, .bottom - .top)
	End With
End Sub

Posted: 2005年12月30日(金) 21:55
by シラフ
最後の
MoveWindow(hMainWnd, .left, .top, .right - .left, .bottom - .top)

MoveWindow(hMainWnd, .left, .top, .right - .left, .bottom - .top,TRUE)
でしょうか・・・?

SetRectという関数の使い方がわかってないだけだと思うのですが、
その部分がうまくいかなかったので、

コード: 全て選択


Sub MainWnd_Create(ByRef cs As CREATESTRUCT)
	Dim rc As RECT
	With rc
		.top=50
		.left=50
		.right=690
		.bottom=530
		AdjustWindowRectEx(rc,cs.style,TRUE,cs.dwExStyle)
		MoveWindow(hMainWnd, .left, .top, .right - .left, .bottom - .top,TRUE)
	End With
End Sub
というふうにすると出来ました。

Posted: 2005年12月30日(金) 23:54
by イグトランス
> 最後の
> MoveWindow(hMainWnd, .left, .top, .right - .left, .bottom - .top)
> は
> MoveWindow(hMainWnd, .left, .top, .right - .left, .bottom - .top,TRUE)
> でしょうか・・・?
そのとおりですね。すみません。

> SetRectという関数の使い方がわかってないだけだと思うのですが、
SetRectは単にRECTの各メンバに値を設定していく関数です。
普通に書けば4つの代入になるところを1行で済ますことができるという楽をするために使いました。
> .top=50
> .left=50
> .right=690
> .bottom=530
たとえばこれはSetRect(rc, 50, 50, 690, 530)と書けるということです。

Posted: 2005年12月31日(土) 02:48
by シラフ
なるほど!そういうことでしたか。
よくわかりました。
ありがとうございました。