请问关于分辨率的问题

liujingxiong 2005-11-28 09:50:06
请问:
1. 如何获得当前系统所有支持的分辨率?
2. 如何取得每个分辨率所支持的所有颜色数和所有的刷新率?
...全文
152 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
rainstormmaster 2005-11-29
  • 打赏
  • 举报
回复
呵呵,给你写一个:
'窗体上一个listbox
Option Explicit

Private Const CCHDEVICENAME = 32
Private Const CCHFORMNAME = 32
Priva
te Type DEVMODE
dmDeviceName As String * CCHDEVICENAME
dmSpecVersion As Integer
dmDriverVersion 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 * CCHFORMNAME
dmUnusedPadding As Integer
dmBitsPerPel As Integer
dmPelsWidth As Long
dmPelsHeight As Long
dmDisplayFlags As Long
dmDisplayFrequency As Long
End Type
Private Declare Function EnumDisplaySettings Lib "user32.dll" Alias "EnumDisplaySettingsA" (ByVal lpszDeviceName As Long, ByVal iModeNum As Long, ByRef lpDevMode As DEVMODE) As Long

Private Declare Function GetDeviceCaps Lib "gdi32" (ByVal hdc As Long, ByVal nIndex As Long) As Long
Private Const HORZRES = 8 ' Screen width in pixels
Private Const VERTRES = 10 ' Screen height in pixels
Private Const BITSPIXEL = 12 ' Bits of color per pixel
Private Const PLANES = 14
Private Sub Form_Load()
Dim dev_mode As DEVMODE
Dim mode_num As Long
' List the display modes.
dev_mode.dmSize = Len(dev_mode)
dev_mode.dmDriverExtra = 0
mode_num = 0
Do While EnumDisplaySettings(0, mode_num, dev_mode) <> 0
List1.AddItem _
Format$(dev_mode.dmPelsWidth) & " x " & _
Format$(dev_mode.dmPelsHeight) & " (" & _
Format$(dev_mode.dmBitsPerPel) & " bit)" & _
Format$(dev_mode.dmDisplayFrequency)
mode_num = mode_num + 1
Loop
End Sub

liujingxiong 2005-11-29
  • 打赏
  • 举报
回复
我去搜索了,都是获取当前或者改变的例子,没有找到EnumDisplaySettings的详细用法。
rainstormmaster 2005-11-29
  • 打赏
  • 举报
回复
不好意思是我搞错了,应该用 EnumDisplaySettings(你的显示器就一个的话)
liujingxiong 2005-11-29
  • 打赏
  • 举报
回复
楼上的朋友,我需要的是获取所有支持的分辨率,并不只是当前屏幕的分辨率。

去Google和百度找了,怎么就没找到EnumDisplayDevices的详细用法?哪位朋友能帮贴出来看看?
northwolves 2005-11-29
  • 打赏
  • 举报
回复
呵呵,不错,收藏.

刷新率有1的吗?
----------------
1HZ有何不可?
南山明月 2005-11-29
  • 打赏
  • 举报
回复
那我就不past了
liujingxiong 2005-11-29
  • 打赏
  • 举报
回复
哇,很不错的程序,谢谢(rainstormmaster(暴风雨 v2.0) )。

可是为什么输出会显示
640 x 480 (4 bit)1
800 x 600 (4 bit)1

刷新率有1的吗?

为什么非标准的分辨率的刷新率(640x400等)都是70?
faysky2 2005-11-28
  • 打赏
  • 举报
回复
用API获得屏幕分辨率和色彩度
--------------------------------------------------------------------------------

 窗体加载时通过调用函数DeviceInfo将返回的屏幕分辨率宽、高和色彩度装入变量DisplayX、DisplayY、DisplayColor中。在你的程序中使用时只需要使用红色标记的一行调用语句即可。
Option Explicit
'声明API函数
Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function GetDeviceCaps Lib "gdi32" (ByVal hdc As Long, ByVal nIndex As Long) As Long
Private Declare Function ReleaseDC Lib "user32" (ByVal hwnd As Long, ByVal hdc As Long) As Long

Private Sub Form_Load()
Dim DisplayX As Integer
Dim DisplayY As Integer
Dim DisplayColor As Integer
Form1.Show
Call DeviceInfo(DisplayX, DisplayY, DisplayColor)
Print Trim(DisplayX):Print Trim(DisplayY);:?Trim(DisplayColor)
End Sub

DeviceInfo自定义函数代码如下
Public Sub DeviceInfo(DisplayX As Integer, DisplayY As Integer, DisplayColor As Integer)
Dim hdesktopwnd
Dim hdccaps
Dim lblRes As String
Dim DisplayBits
Dim DisplayPlanes
Dim RetVal
hdccaps = GetDC(hdesktopwnd)
DisplayBits = GetDeviceCaps(hdccaps, 12)
DisplayPlanes = GetDeviceCaps(hdccaps, 14)
DisplayX = GetDeviceCaps(hdccaps, 8)
DisplayY = GetDeviceCaps(hdccaps, 10)
RetVal = ReleaseDC(hdesktopwnd, hdccaps)
Select Case DisplayBits
Case 1
If DisplayPlanes = 1 Then
DisplayColor = 1
Else
If DisplayPlanes = 4 Then DisplayColor = 4 Else DisplayColor = 0
End If
Case 8
DisplayColor = 8
Case 16
DisplayColor = 16
Case 24
DisplayColor = 24
Case 32
DisplayColor = 32
Case Else
DisplayColor = 0'未知色彩度
End Select
End Sub

上述内容在VB60、Windows98中调试通过,可直接复制使用



rainstormmaster 2005-11-28
  • 打赏
  • 举报
回复
你的两个问题其实是一个问题,调用api函数EnumDisplayDevices即可,具体代码你用google自己搜索吧

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧