[IGNORE - 4岁帖子]通过vb.net代码更改分辨率 [英] [IGNORE - 4 year old post] Resolution change by vb.net code

查看:73
本文介绍了[IGNORE - 4岁帖子]通过vb.net代码更改分辨率的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我可以使用以下代码来改变分辨率,但问题是,当我运行程序时,它会改变分辨率(1280 * 1024)&尽管它的宽度是1280&高度是1024.但当我关闭该程序&再次运行然后它的工作我的意思是适合屏幕。这意味着我第一次运行我的程序时会改变分辨率,但不能适应屏幕。那么你能告诉我我应该怎样做三件事情,比如当我运行我的程序时,它会改变分辨率&适合我的形式与屏幕&当我关闭它时,它将恢复其先前的分辨率。请帮我。



代码:



 Imports System.Runtime.InteropServices 
公共模块resChanger
Const ENUM_CURRENT_SETTINGS As Integer = -1
Const CDS_UPDATEREGISTRY As Integer =& H1
Const CDS_TEST As Long =& H2
Const CCDEVICENAME As Integer = 32
Const CCFORMNAME As Integer = 32
Const DISP_CHANGE_SUCCESSFUL As Integer = 0
Const DISP_CHANGE_RESTART As Integer = 1
Const DISP_CHANGE_FAILED As Integer = -1
Private Declare Function EnumDisplaySettings Libuser32 AliasEnumDisplaySettingsA(ByVal lpszDeviceName As Integer,ByVal iModeNum As Integer,ByRef lpDevMode As DEVMODE)As Integer
Private Declare Function ChangeDisplaySettings Libuser32AliasChangeDisplaySettingsA(ByRef DEVMODE As DEVMODE,ByVal flags As Long)作为整数
< StructLayout(LayoutKind.Sequential)>公共结构DEVMODE
< MarshalAsAttribute(UnmanagedType.ByValTStr,SizeConst:= CCDEVICENAME)> Public dmDeviceName As String
Public dmSpecVersion As Short
Public dmDriverVersion As Short
Public dmSize As Short
Public dmDriverExtra As Short
Public dmFields As Integer
Public dmOrientation As Short
Public dmPaperSize As Short
Public dmPaperLength As Short
Public dmPaperWidth As Short
Public dmScale As Short
Public dmCopies As Short
Public dmDefaultSource As Short
Public dmPrintQuality As Short
Public dmColor As Short
Public dmDuplex As Short
Public dmYResolution As Short
Public dmTTOption As Short
Public dmCollat​​e As Short
< MarshalAsAttribute(UnmanagedType.ByValTStr,SizeConst:= CCFORMNAME)> Public dmFormName As String
Public dmUnusedPadding As Short
Public dmBitsPerPel As Short
Public dmPelsWidth As Integer
Public dmPelsHeight As Integer
Public dmDisplayFlags As Integer
Public dmDisplayFrequency作为整数
结束结构
Public Sub changeRes(ByVal theWidth As Integer,ByVal theHeight as Integer)
Dim DevM As DEVMODE
DevM.dmDeviceName = New [String](New Char( 32){})
DevM.dmFormName = New [String](New Char(32){})
DevM.dmSize = CShort(Marshal.SizeOf(GetType(DEVMODE)))

如果0<> EnumDisplaySettings(Nothing,ENUM_CURRENT_SETTINGS,DevM)然后
Dim lResult As Integer
DevM.dmPelsWidth = theWidth
DevM.dmPelsHeight = theHeight
DevM.dmPelsWidth = 1280
DevM。 dmPelsHeight = 1024
lResult = ChangeDisplaySettings(DevM,CDS_TEST)
lResult = ChangeDisplaySettings(DevM,CDS_UPDATEREGISTRY)
End if
End Sub
End Module

Public Class Form1
Private Sub Form1_Load(ByVal sender As System.Object,ByVal e As System.EventArgs)Handles MyBase.Load
Call changeRes(1280,1024)
End Sub
结束班

解决方案

对于你这样做仍然是令人讨厌的地狱和警告你所有的用户,你是不是一个非常好的程序员。设置你的表单,让它自己解决任何问题。


删除这两行......这很简单............ .......






 如果  0 <> EnumDisplaySettings( Nothing ,ENUM_CURRENT_SETTINGS,DevM)然后 
Dim lResult As 整数
DevM.dmPelsWidth = theWidth
DevM.dmPelsHeight = theHeight
DevM.dmPelsWidth = 1280
DevM.dmPelsHeight = 1024

lResult = ChangeDisplaySettings(DevM,CDS_TEST)
lResult = ChangeDisplaySettings(DevM,CDS_UPDATEREGISTRY)
结束 如果
结束 < span class =code-keyword> Sub
结束 模块


I can use following codes to change resolution but problem is that when I run my program it changes resolution(1280*1024) & show form which doesnt fit the screen though its width is 1280 & height is 1024. But when I close that program & run it again then it works I mean fit with the screen. It means first time when I run my program it changes resolution but cant fit form with screen. So can you tell me how should I do three things together like when I run my program it changes resolution & fit my form with screen & when I close it it will get back its previous resolution. Please help me.

Code :

Imports System.Runtime.InteropServices
Public Module resChanger
    Const ENUM_CURRENT_SETTINGS As Integer = -1
    Const CDS_UPDATEREGISTRY As Integer = &H1
    Const CDS_TEST As Long = &H2
    Const CCDEVICENAME As Integer = 32
    Const CCFORMNAME As Integer = 32
    Const DISP_CHANGE_SUCCESSFUL As Integer = 0
    Const DISP_CHANGE_RESTART As Integer = 1
    Const DISP_CHANGE_FAILED As Integer = -1
    Private Declare Function EnumDisplaySettings Lib "user32" Alias "EnumDisplaySettingsA" (ByVal lpszDeviceName As Integer, ByVal iModeNum As Integer, ByRef lpDevMode As DEVMODE) As Integer
    Private Declare Function ChangeDisplaySettings Lib "user32" Alias "ChangeDisplaySettingsA" (ByRef DEVMODE As DEVMODE, ByVal flags As Long) As Integer
    <StructLayout(LayoutKind.Sequential)> Public Structure DEVMODE
        <MarshalAsAttribute(UnmanagedType.ByValTStr, SizeConst:=CCDEVICENAME)> Public dmDeviceName As String
        Public dmSpecVersion As Short
        Public dmDriverVersion As Short
        Public dmSize As Short
        Public dmDriverExtra As Short
        Public dmFields As Integer
        Public dmOrientation As Short
        Public dmPaperSize As Short
        Public dmPaperLength As Short
        Public dmPaperWidth As Short
        Public dmScale As Short
        Public dmCopies As Short
        Public dmDefaultSource As Short
        Public dmPrintQuality As Short
        Public dmColor As Short
        Public dmDuplex As Short
        Public dmYResolution As Short
        Public dmTTOption As Short
        Public dmCollate As Short
        <MarshalAsAttribute(UnmanagedType.ByValTStr, SizeConst:=CCFORMNAME)> Public dmFormName As String
        Public dmUnusedPadding As Short
        Public dmBitsPerPel As Short
        Public dmPelsWidth As Integer
        Public dmPelsHeight As Integer
        Public dmDisplayFlags As Integer
        Public dmDisplayFrequency As Integer
    End Structure
    Public Sub changeRes(ByVal theWidth As Integer, ByVal theHeight As Integer)
        Dim DevM As DEVMODE
        DevM.dmDeviceName = New [String](New Char(32) {})
        DevM.dmFormName = New [String](New Char(32) {})
        DevM.dmSize = CShort(Marshal.SizeOf(GetType(DEVMODE)))

        If 0 <> EnumDisplaySettings(Nothing, ENUM_CURRENT_SETTINGS, DevM) Then
            Dim lResult As Integer
            DevM.dmPelsWidth = theWidth
            DevM.dmPelsHeight = theHeight
            DevM.dmPelsWidth = 1280
            DevM.dmPelsHeight = 1024
            lResult = ChangeDisplaySettings(DevM, CDS_TEST)
          lResult = ChangeDisplaySettings(DevM, CDS_UPDATEREGISTRY)
          End If
          End Sub
          End Module

Public Class Form1
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    Call changeRes(1280, 1024)
    End Sub
End Class

解决方案

For you to do this is still nasty as hell and a warning to all your users that you're not a very good programmer. Set up your form so it lays itself out on any resolution instead.


Delete these two rows.....This is very simple.................



If 0 <> EnumDisplaySettings(Nothing, ENUM_CURRENT_SETTINGS, DevM) Then
            Dim lResult As Integer
            DevM.dmPelsWidth = theWidth
            DevM.dmPelsHeight = theHeight
            DevM.dmPelsWidth = 1280
            DevM.dmPelsHeight = 1024            
            lResult = ChangeDisplaySettings(DevM, CDS_TEST)
          lResult = ChangeDisplaySettings(DevM, CDS_UPDATEREGISTRY)
          End If
          End Sub
          End Module


这篇关于[IGNORE - 4岁帖子]通过vb.net代码更改分辨率的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆