设计完程序,改变分辨率后,运行程序,窗体太难看,有什么办法解决

解决方案 »

  1.   

    Private Declare Function EnumDisplaySettings Lib "user32" Alias "EnumDisplaySettingsA" _
    () '(ByVal lpszdevicename As Long, ByVal iModeNum As Long, lpDevMode As Any) As Boolean
    Private Declare Function ChangeDisplaySettings Lib "user32" Alias "ChangeDisplaySettingsA" _
    () '(lpDevMode As Any, ByVal dwFlags As Long) As Long
    Private Declare Function ExitWindowsEx Lib "user32" (ByVal uFlags As Long, ByVal dwReserved As Long) As Long
    Const EWX_LOGOFF = 0
    Const EWX_SHUTDOWN = 1
    Const EWX_REBOOT = 2
    Const EWX_FORCE = 4
    Const CCDEVICENAME = 32
    Const CCFORMNAME = 32
    Const DM_BITSPERPEL = &H40000
    Const DM_PELSWIDTH = &H80000
    Const DM_PELSHEIGHT = &H100000
    Const CDS_UPDATEREGISTRY = &H1
    Const CDS_TEST = &H4
    Const DISP_CHANGE_SUCCESSFUL = 0
    Const DISP_CHANGE_RESTART = 1
    Private Type DEVMODE
        dmDeviceName As String * CCDEVICENAME
        dmSpecVersion As Integer
        dmDviverVersion As Integer
        dmSize As Integer
        dmDriverExtra As Integer
        dmFields As Long
        dmOrientation As Integer
        dmPaperSize As Integer
        dmPaperLength As Integer
        dmPaperWidth As Integer
        dmScale As Integer
        dmCopies As Integer
        dmDefaultSource As Integer
        dmPrintQuality As Integer
        dmColor As Integer
        dmDuplex As Integer
        dmYResolution As Integer
        dmTTOption As Integer
        dmCollate As Integer
        dmFormName As String * CCFORMNAME
        dmUnusedPadding As Integer
        dmBitsPerPel As Integer
        dmPelsWidth As Long
        dmPelsHeight As Long
        dmDisplayFlags As Long
        dmDisplayFrequency As Long
    End Type
    Private Sub Command1_Click()
        Dim DevM As DEVMODE 'DevM搜集信息
        Dim erg As Long
        Dim an As Integer
        Dim str As String    erg = EnumDisplaySettings(0&, 0&, DevM) '不改变颜色数目是因为如果改变颜色数就要重新启动
        DevM.dmFields = DM_PELSWIDTH Or DM_PELSHEIGHT
        DevM.dmPelsWidth = 1024 '屏幕宽度  改变分辨率只需该宽度和高度这两个值
        DevM.dmPelsHeight = 768 '屏幕高度
        DevM.dmBitsPerPel = 32 '可以是8,16,32
    '    改变显示模式并检查是否可能
        erg = ChangeDisplaySettings(DevM, CDS_TEST) '检查是否成功
        Select Case erg&
            Case DISP_CHANGE_RESTART
                an = MsgBox("您现在必须重新启动系统,执行吗?", vbYesNo + vbSystemModal, "信息")
                If an = vbYes Then
                    erg = ExitWindowsEx(EWX_REBOOT, 0&)
                End If
            Case DISP_CHANGE_SUCCESSFUL
                erg = ChangeDisplaySettings(DevM, CDS_UPDATEREGISTRY)
                MsgBox "一切正常!", vbOKOnly + vbSystemModal, "成功"
            Case Else
                MsgBox "显示模式不支持!", vbOKOnly + vbSystemModal, "错误"
        End Select
    End SubPrivate Sub Command2_Click()
         Dim DevM As DEVMODE 'DevM搜集信息
        Dim erg As Long
        Dim an As Integer
        Dim str As String    erg = EnumDisplaySettings(0&, 0&, DevM) '不改变颜色数目是因为如果改变颜色数就要重新启动
        DevM.dmFields = DM_PELSWIDTH Or DM_PELSHEIGHT
        DevM.dmPelsWidth = 800 '屏幕宽度  改变分辨率只需该宽度和高度这两个值
        DevM.dmPelsHeight = 600 '屏幕高度
        DevM.dmBitsPerPel = 32 '可以是8,16,32
        '改变显示模式并检查是否可能
        erg = ChangeDisplaySettings(DevM, CDS_TEST) '检查是否成功
        Select Case erg&
            Case DISP_CHANGE_RESTART
                an = MsgBox("您现在必须重新启动系统,执行吗?", vbYesNo + vbSystemModal, "信息")
                If an = vbYes Then
                    erg = ExitWindowsEx(EWX_REBOOT, 0&)
                End If
            Case DISP_CHANGE_SUCCESSFUL
                erg = ChangeDisplaySettings(DevM, CDS_UPDATEREGISTRY)
                MsgBox "一切正常!", vbOKOnly + vbSystemModal, "成功"
            Case Else
                MsgBox "显示模式不支持!", vbOKOnly + vbSystemModal, "错误"
        End Select
    End Sub
      

  2.   

    Private Declare Function EnumDisplaySettings Lib "user32" Alias "EnumDisplaySettingsA" _
    () '(ByVal lpszdevicename As Long, ByVal iModeNum As Long, lpDevMode As Any) As Boolean
    Private Declare Function ChangeDisplaySettings Lib "user32" Alias "ChangeDisplaySettingsA" _
    () '(lpDevMode As Any, ByVal dwFlags As Long) As Long
    Private Declare Function ExitWindowsEx Lib "user32" (ByVal uFlags As Long, ByVal dwReserved As Long) As Long
    Const EWX_LOGOFF = 0
    Const EWX_SHUTDOWN = 1
    Const EWX_REBOOT = 2
    Const EWX_FORCE = 4
    Const CCDEVICENAME = 32
    Const CCFORMNAME = 32
    Const DM_BITSPERPEL = &H40000
    Const DM_PELSWIDTH = &H80000
    Const DM_PELSHEIGHT = &H100000
    Const CDS_UPDATEREGISTRY = &H1
    Const CDS_TEST = &H4
    Const DISP_CHANGE_SUCCESSFUL = 0
    Const DISP_CHANGE_RESTART = 1
    Private Type DEVMODE
        dmDeviceName As String * CCDEVICENAME
        dmSpecVersion As Integer
        dmDviverVersion As Integer
        dmSize As Integer
        dmDriverExtra As Integer
        dmFields As Long
        dmOrientation As Integer
        dmPaperSize As Integer
        dmPaperLength As Integer
        dmPaperWidth As Integer
        dmScale As Integer
        dmCopies As Integer
        dmDefaultSource As Integer
        dmPrintQuality As Integer
        dmColor As Integer
        dmDuplex As Integer
        dmYResolution As Integer
        dmTTOption As Integer
        dmCollate As Integer
        dmFormName As String * CCFORMNAME
        dmUnusedPadding As Integer
        dmBitsPerPel As Integer
        dmPelsWidth As Long
        dmPelsHeight As Long
        dmDisplayFlags As Long
        dmDisplayFrequency As Long
    End Type
    Private Sub Command1_Click()
        Dim DevM As DEVMODE 'DevM搜集信息
        Dim erg As Long
        Dim an As Integer
        Dim str As String    erg = EnumDisplaySettings(0&, 0&, DevM) '不改变颜色数目是因为如果改变颜色数就要重新启动
        DevM.dmFields = DM_PELSWIDTH Or DM_PELSHEIGHT
        DevM.dmPelsWidth = 1024 '屏幕宽度  改变分辨率只需该宽度和高度这两个值
        DevM.dmPelsHeight = 768 '屏幕高度
        DevM.dmBitsPerPel = 32 '可以是8,16,32
    '    改变显示模式并检查是否可能
        erg = ChangeDisplaySettings(DevM, CDS_TEST) '检查是否成功
        Select Case erg&
            Case DISP_CHANGE_RESTART
                an = MsgBox("您现在必须重新启动系统,执行吗?", vbYesNo + vbSystemModal, "信息")
                If an = vbYes Then
                    erg = ExitWindowsEx(EWX_REBOOT, 0&)
                End If
            Case DISP_CHANGE_SUCCESSFUL
                erg = ChangeDisplaySettings(DevM, CDS_UPDATEREGISTRY)
                MsgBox "一切正常!", vbOKOnly + vbSystemModal, "成功"
            Case Else
                MsgBox "显示模式不支持!", vbOKOnly + vbSystemModal, "错误"
        End Select
    End SubPrivate Sub Command2_Click()
         Dim DevM As DEVMODE 'DevM搜集信息
        Dim erg As Long
        Dim an As Integer
        Dim str As String    erg = EnumDisplaySettings(0&, 0&, DevM) '不改变颜色数目是因为如果改变颜色数就要重新启动
        DevM.dmFields = DM_PELSWIDTH Or DM_PELSHEIGHT
        DevM.dmPelsWidth = 800 '屏幕宽度  改变分辨率只需该宽度和高度这两个值
        DevM.dmPelsHeight = 600 '屏幕高度
        DevM.dmBitsPerPel = 32 '可以是8,16,32
        '改变显示模式并检查是否可能
        erg = ChangeDisplaySettings(DevM, CDS_TEST) '检查是否成功
        Select Case erg&
            Case DISP_CHANGE_RESTART
                an = MsgBox("您现在必须重新启动系统,执行吗?", vbYesNo + vbSystemModal, "信息")
                If an = vbYes Then
                    erg = ExitWindowsEx(EWX_REBOOT, 0&)
                End If
            Case DISP_CHANGE_SUCCESSFUL
                erg = ChangeDisplaySettings(DevM, CDS_UPDATEREGISTRY)
                MsgBox "一切正常!", vbOKOnly + vbSystemModal, "成功"
            Case Else
                MsgBox "显示模式不支持!", vbOKOnly + vbSystemModal, "错误"
        End Select
    End Sub
      

  3.   

    在Resize事件中使用SCREEN相对大小,还能避免不同显示器/显卡的显示差异
      

  4.   

    简单得说来,要让应用程序适应不同的分辨率的思路是这样的:
    首先,要获取屏幕分辨率;
    然后确定哪个窗体要进行缩小(或扩大),并罗列出需要改变大小的控件元素(譬如treeview,listview等等);
    然后再在Form_Resize()中写入相应代码即可。例子的话,你打开VB,里面选择“应用程序向导”,然后在第二步的“界面”中选择“资源管理器”样式,然后直接点完成。你在代码中SizeControls过程就是类似自动调节的,你可以参考一下看看,应该有所帮助。-------------
    上面的DX用的API是改变分辨率的API,楼主问的是如何适应当前分辨率,这好象有点...
    或许我没有仔细看太长了点哦!!!还有,我很菜,不要笑~
      

  5.   

    支持Gutta(冯大狂) 还有,我也很菜,不许笑