0

一部の MDI 子フォームでのみ MDI 親スクロール バーを有効にし、他のフォームでは無効にする必要があります。解像度を変更するためのサイズ変更コードがありますが、DPI を変更すると、フォームの幅が画面サイズを超えます。したがって、これらのフォームでは有効にし、他のフォームでは無効にする必要があります。

解決のために

ResizeX = Screen.Width / (1024 * Screen.TwipsPerPixelX)
ResizeY = Screen.Height / (768 * Screen.TwipsPerPixelY)

DPI の場合

XPIXELSPERINCH = GetDeviceCaps(hdc, 88)
YPIXELSPERINCH = GetDeviceCaps(hdc, 90)

sendmessage 関数を使用して MDI 親フォームのスクロール バーを無効/有効にする方法はありますか。

4

1 に答える 1

0

ShowScrollBar()とで少し試してみましたSetWindowLong()。VB6が引き継ぎ、スクロールバーを再作成し続けるため、両方で失敗しました。

私がなんとかしたことには、それ自体の問題があります。その問題を回避するために、他の「ハック」を考え出すことができると確信しています。

とにかく、frmMdiChildMDIChildプロパティを に設定し、次のFalseように設定します。

Private Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long
Private Declare Function GetWindow Lib "user32" (ByVal hwnd As Long, ByVal wCmd As Long) As Long
Private Const GW_CHILD As Long = 5

次に、フォームをロードしているとき:

SetParent frmMdiChild.hwnd, GetWindow(frmMdiParent.hwnd, GW_CHILD)

これにより、ウィンドウ内に子が配置されます。場所を移動する必要がある場合があります。前述したように、ユーザーが のサイズfrmMdiParentを変更した場合は、何らかの方法で調整する必要があります。

ここで、代わりに次のように呼び出すと (適切な子を取得できません):

SetParent frmMdiChild.hwnd, frmMdiParent.hwnd

問題を完全に回避できます。しかし、あなたはその見た目に満足していないかもしれません。もしそうなら、完璧です!

于 2013-08-21T13:36:52.983 に答える