剖析讲解VB.NET分辩率案例

开发 后端
在VB.NET中得到显示器的分辨率很容易,调试就是一个很麻烦的事,文章实例利用两个api函数来解决VB.NET分辩率的问题,快看看吧!

使用VB.NET开发的程序员知道很容易获得显示器的分辩率,但是,要改变VB.NET分辩率是一件很让人头疼的事。由于VB.NET的类库没有将enumdisplaysettings 和ChangeDisplaySettings这两个API函数进行封装,但是我们得调用它们函数,相对于VB6来说,VB.NET调用API函数是有一些小的改动!

下面,我们就尝试一下在VB.NET分辩率调试,使用这两个api函数。

新建一个项目,在form1上添加两个按钮,一个名为btngetdisp,将其text属性设置为“得到分辩率”;另一个按钮名为btnsetdisp,text属性为“设置分辩率”。然后在代码窗口里添加以下代码:

  1. private Const CCDEVICENAME As Short = 32 
  2. private Const CCFORMNAME As Short = 32 
  3. private Const DM_PELSWIDTH As Integer = &H80000  
  4. private Const DM_PELSHEIGHT As Integer = &H100000  
  5. '刷新频率常量  
  6. private Const DM_DISPLAYFREQUENCY As Integer = &H400000  
  7. '调用API函数  
  8. private Declare Function EnumDisplaySettings Lib "user32" Alias "EnumDisplaySettingsA" (ByVal lpszDeviceName As Integer, ByVal iModeNum As Integer, ByRef lpDevMode As DEVMODE) As Boolean  
  9. '调用api函数  
  10. private Declare Function ChangeDisplaySettings Lib "user32" Alias "ChangeDisplaySettingsA" (ByRef lpDevMode As DEVMODE, ByVal dwflags As Integer) As Integer  
  11. '定义结构  
  12. private Structure DEVMODE  
  13. <vbfixedstring(ccdevicename), System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.ByValTStr, SizeConst:=CCDEVICENAME)> Public dmDeviceName  
  14. As  
  15. String  
  16. dim dmSpecVersion As Short  
  17. dim dmDriverVersion As Short  
  18. dim dmSize As Short  
  19. dim dmDriverExtra As Short  
  20. dim dmFields As Integer  
  21. dim dmOrientation As Short  
  22. dim dmPaperSize As Short  
  23. dim dmPaperLength As Short  
  24. dim dmPaperWidth As Short  
  25. dim dmScale As Short  
  26. dim dmCopies As Short  
  27. dim dmDefaultSource As Short  
  28. dim dmPrintQuality As Short  
  29. dim dmColor As Short  
  30. dim dmDuplex As Short  
  31. dim dmYResolution As Short  
  32. dim dmTTOption As Short  
  33. dim dmCollate As Short  
  34. <vbfixedstring(ccformname), System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.ByValTStr, SizeConst:=CCFORMNAME)> Public dmFormName As String  
  35. dim dmUnusedPadding As Short  
  36. dim dmBitsPerPel As Short  
  37. dim dmPelsWidth As Integer  
  38. dim dmPelsHeight As Integer  
  39. dim dmDisplayFlags As Integer  
  40. dim dmDisplayFrequency As Integer  
  41. end Structure   
  42. '改变分辩率过程,参数一宽度,参数二高度  
  43. private Sub ChangeDisp(ByRef iWidth As Single, ByRef iHeight As Single)  
  44. dim blnWorked As Boolean  
  45. dim i As Integer  
  46. dim DevM As Form1.DEVMODE  
  47. i = 0 
  48. do  
  49. blnworked = EnumDisplaySettings(0, i, DevM)  
  50. ii = i + 1  
  51. loop Until (blnWorked = False)  
  52. with DevM  
  53. .dmfields = DM_PELSWIDTH Or DM_PELSHEIGHT Or DM_DISPLAYFREQUENCY  
  54. .dmpelswidth = iWidth 
  55. .dmpelsheight = iHeight 
  56. '刷新频率为85  
  57. .dmdisplayfrequency = 85   
  58. end With  
  59. call ChangeDisplaySettings(DevM, 0)  
  60. end Sub  
  61. private Sub btnGetDisp_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnGetDisp.Click  
  62. dim X As Short = System.Windows.Forms.Screen.PrimaryScreen.Bounds.Width  
  63. dim Y As Short = System.Windows.Forms.Screen.PrimaryScreen.Bounds.Height  
  64. msgbox("您的显示器分辨率是" & X & " X " & Y)  
  65. end Sub  
  66. private Sub btnSetDisp_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSetDisp.Click  
  67. if MsgBox("您确认要将显示器分辨率改为1024x768吗?", MsgBoxStyle.OKCancel, "系统消息") = MsgBoxResult.OK Then  
  68. '调用改变分辩率过程  
  69. changedisp(1024, 768)  
  70. end If  
  71. end Sub 

程序运行所示,点击设置VB.NET分辩率,将会把显示器分辨率改为1024x768,刷新频率为85,是不是很简单?

【编辑推荐】

  1. 实例讲述VB.NET使用Log4Net
  2. 三分钟学会VB.NET转换形态
  3. VB.NET获取硬盘信息四大法宝
  4. 讲述VB.NET调用Excel的好处
  5. 简单例子概述VB.NET新窗体
责任编辑:田树 来源: 博客
相关推荐

2009-10-15 17:50:48

VB.NET调用API

2009-10-28 11:27:34

VB.NET资源文件

2009-10-21 16:00:26

VB.NET CASE

2009-10-23 13:14:38

2009-10-29 14:02:24

VB和VB.NET比较

2010-01-11 16:04:10

VB.NET使用wit

2009-10-20 10:16:24

VB.NET COMB

2009-10-27 16:52:41

VB.NET文件传输

2009-10-13 15:09:19

VB.NET使用Tre

2009-11-02 16:22:16

VB.NET面向对象

2009-10-23 13:10:14

VB.NET List

2009-10-12 13:54:22

VB.NET Data

2009-10-15 11:42:05

VB.Net赋值语句

2010-01-18 18:20:49

VB.NET使用API

2009-10-13 14:42:30

VB.NET静态成员

2009-10-14 17:21:47

VB.NET定制Win

2009-10-29 11:41:27

VB.NET写Obje

2010-01-21 12:55:08

VB.NET对象序列

2010-01-12 11:47:09

VB.NET可选参数

2009-10-28 10:15:48

VB.NET框架类库
点赞
收藏

51CTO技术栈公众号