RADでウインドウの大きさを(400,400)としても、クライアント領域の大きさは(392,366)となってしまいます。
今作ってるソフトは、これでは困るので、クライアント領域の大きさを(400,400)にするにはどうすればいいのでしょうか?
ウインドウサイズについて
希望するクライアント領域の大きさからウィンドウ全体の大きさを計算するAdjustWindowRectEx関数があります。
1番目の引数に希望するクライアント領域の大きさが入ったRECT型のデータを渡すと
関数内で計算して必要なウィンドウ全体の大きさをこの引数に返します。
2番目と4番目の引数はウィンドウスタイルと拡張スタイルです。
3番目はメニューがあるかどうかをTRUE/FALSEで指定します。
この関数をCreateイベント内で呼び、MoveWindowで動かせば良いです。
たとえばこんな感じです。
コード: 全て選択
Declare Function AdjustWindowRectEx Lib "user32.dll" (
ByRef rc As RECT,
ByVal dwStyle As DWord,
bMenu As Long,
dwExStyle As DWord) As Long
関数内で計算して必要なウィンドウ全体の大きさをこの引数に返します。
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
最後の
MoveWindow(hMainWnd, .left, .top, .right - .left, .bottom - .top)
は
MoveWindow(hMainWnd, .left, .top, .right - .left, .bottom - .top,TRUE)
でしょうか・・・?
SetRectという関数の使い方がわかってないだけだと思うのですが、
その部分がうまくいかなかったので、
というふうにすると出来ました。
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
> 最後の
> 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)と書けるということです。
> 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)と書けるということです。