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()and SetWindowLong()。我在这两个方面都不成功,因为 VB6 接管并不断重新创建滚动条。

我确实设法做到了,这有其自身的问题。我相信你可以想出其他“黑客”来解决这个问题。

无论如何,将frmMdiChild'sMDIChild的属性设置为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 回答