level 2
VB6内新建一个窗体,它的最大尺寸是不是和当前电脑显示器的分辨率有关?
我将窗体通过鼠标手动拖动到最大状态,发现Width是28800,Height是16200。分别除以15后,刚好是显示器的分辨率1920和1080。
请问如何将窗体尺寸设置成更大的尺寸?
2024年07月08日 03点07分
1
level 2
用户的电脑显示器比设计者的大,这种情况该咋办呢?
是和屏幕大小有关还是和屏幕的分辨率有关呢?
2024年07月08日 03点07分
2
level 13
你设计时的分辨率为1920x1080,窗体没有最大化时大小比如为1024x768。你程序运行时读取系统分辨率如果是1920x1080则保持不变(也是就1024乘放大系数1,768也乘放大系数1),如果是2560X1440就乘放大系数1.333
按这种比例计算:1024(设计时窗体默认宽度,1920下的) x (读取系统分辨率的宽度 / 1920(设计时分辨率宽度)),高度也同样
而最大化时窗口会自动调整,不需要处理
2024年07月08日 04点07分
3
当然这样窗体上的控件位置大小也需要重新计算,在form_resize事件中处理
2024年07月08日 04点07分
多谢大佬讲解
2024年07月08日 05点07分
@贴吧用户_JJe5KMC618 还有一点要说的是,这种Me.Width或Me.Move设置窗口大小,有些许误差,这是因为主题的原因,比如win7标题栏默认高度是27像素,而设置主题后标题样的高度是可以由用户完全自定义的,用户可能设置成了47像素,或者换win10系统,win10可能默认标题样是30像素。
2024年07月08日 05点07分
@贴吧用户_JJe5KMC618 这种可以用GetSystemMetrics API函数获取标题栏及窗口外边框宽度及高度,会精确点
2024年07月08日 05点07分
level 9
iWinSt = Me.WindowState
showWindow Me.hwnd, SW_NORMAL
SetBorder Me.hwnd, False '无边框
Me.Refresh
If iWinSt = 2 Then showWindow Me.hwnd, SW_MAXIMIZE
'[0.9.18] 设置无边框会使全屏扩大两个边框,且偏移一个边框。先Normal后Maximize
'设有无标题栏
Public Sub SetBorder(shWnd As Long, bB As Boolean)
Dim lStyle As Long
lStyle = GetWindowLong(shWnd, GWL_STYLE)
If bB Then
lStyle = lStyle Or WS_THICKFRAME Or WS_CAPTION
SetWindowLong shWnd, GWL_STYLE, lStyle
SetWindowPos shWnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOZORDER Or SWP_DRAWFRAME Or SWP_NOMOVE Or SWP_NOSIZE
Else
lStyle = lStyle And Not WS_THICKFRAME And Not WS_CAPTION '去掉边框和标题栏
SetWindowLong shWnd, GWL_STYLE, lStyle
SetWindowPos shWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOZORDER Or SWP_DRAWFRAME Or SWP_NOMOVE Or SWP_NOSIZE '[0.9.16]修改
End If
End Sub
2024年07月10日 09点07分
5
最大化的话,可以尝试在WM_WINDOWPOSCHANGING或WM_GETMINMAXINFO这两个消息中处理,普通代码是很难到达的,窗口改变大小时都会进入两个消息中
2024年07月11日 01点07分