[IGNORE - 4岁帖子]通过vb.net代码更改分辨率 [英] [IGNORE - 4 year old post] Resolution change by vb.net code
问题描述
我可以使用以下代码来改变分辨率,但问题是,当我运行程序时,它会改变分辨率(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 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作为整数
结束结构
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 = theHeightDevM.dmPelsWidth = 1280 DevM.dmPelsHeight = 1024lResult = ChangeDisplaySettings(DevM, CDS_TEST) lResult = ChangeDisplaySettings(DevM, CDS_UPDATEREGISTRY) End If End Sub End Module
这篇关于[IGNORE - 4岁帖子]通过vb.net代码更改分辨率的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!