高手请帮帮忙!!!!!

tszz 2003-11-19 02:01:36

请问如何设置vb程序的窗口自动适应不同分辨率的点脑,如800*600和1024*768
谢谢了
...全文
39 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
yjch 2003-11-20
  • 打赏
  • 举报
回复
up.......
射天狼 2003-11-19
  • 打赏
  • 举报
回复
在窗口的RESIZE事件里写代码,调整控件的大小及位置!!
null1027 2003-11-19
  • 打赏
  • 举报
回复
看看这个程序的源代码 有点长
Option Explicit

' ChangRez sample by Matt Hart - mhart@taascforce.com
' http://www.webczar.com/defcon/mh
'
' How to change video resolution in Windows 95.
' The WinSDK API declarations for VB does NOT include
' this useful procedure, nor does it include some
' of the needed constants. I had to figure out the API
' declaration and go to the Platform SDK
' find most of the constants.

Const CCHDEVICENAME = 32
Const CCHFORMNAME = 32

Private 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

Const DM_BITSPERPEL = &H40000
Const DM_PELSWIDTH = &H80000
Const DM_PELSHEIGHT = &H100000
Const DM_DISPLAYFLAGS = &H200000
Const DM_DISPLAYFREQUENCY = &H400000

Private Declare Function ChangeDisplaySettings Lib "user32" Alias "ChangeDisplaySettingsA" (lpInitData As DEVMODE, ByVal dwFlags As Long) As Long
Private Declare Function EnumDisplaySettings Lib "user32" Alias "EnumDisplaySettingsA" (lpszDeviceName As Any, ByVal iModeNum As Long, lpDevMode As Any) As Boolean
Private Declare Function ExitWindowsEx Lib "user32" (ByVal uFlags As Long, ByVal dwReserved As Long) As Long
Private Declare Function GetDeviceCaps Lib "gdi32" (ByVal hdc As Long, ByVal nIndex As Long) As Long

Const BITSPIXEL = 12

' /* Flags for ChangeDisplaySettings */
Const CDS_UPDATEREGISTRY = &H1
Const CDS_TEST = &H2
Const CDS_FULLSCREEN = &H4
Const CDS_GLOBAL = &H8
Const CDS_SET_PRIMARY = &H10
Const CDS_RESET = &H40000000
Const CDS_SETRECT = &H20000000
Const CDS_NORESET = &H10000000

' /* Return values for ChangeDisplaySettings */
Const DISP_CHANGE_SUCCESSFUL = 0
Const DISP_CHANGE_RESTART = 1
Const DISP_CHANGE_FAILED = -1
Const DISP_CHANGE_BADMODE = -2
Const DISP_CHANGE_NOTUPDATED = -3
Const DISP_CHANGE_BADFLAGS = -4
Const DISP_CHANGE_BADPARAM = -5

Const EWX_LOGOFF = 0
Const EWX_SHUTDOWN = 1
Const EWX_REBOOT = 2
Const EWX_FORCE = 4

Dim D() As DEVMODE, lNumModes As Long

Private Sub Command1_Click()
Dim l As Long, Flags As Long, x As Long
x = List1.ListIndex
D(x).dmFields = DM_BITSPERPEL Or DM_PELSWIDTH Or DM_PELSHEIGHT
Flags = CDS_UPDATEREGISTRY
l = ChangeDisplaySettings(D(x), Flags)
Select Case l
Case DISP_CHANGE_RESTART
l = MsgBox("This change will not take effect until you reboot the system. Reboot now?", vbYesNo)
If l = vbYes Then
Flags = 0
l = ExitWindowsEx(EWX_REBOOT, Flags)
End If
Case DISP_CHANGE_SUCCESSFUL
Case Else
MsgBox "Error changing resolution! Returned: " & l
End Select
End Sub

Private Sub Form_Load()
Dim l As Long, lMaxModes As Long
Dim lBits As Long, lWidth As Long, lHeight As Long
lBits = GetDeviceCaps(hdc, BITSPIXEL)
lWidth = Screen.Width \ Screen.TwipsPerPixelX
lHeight = Screen.Height \ Screen.TwipsPerPixelY
lMaxModes = 8
ReDim D(0 To lMaxModes) As DEVMODE
lNumModes = 0
l = EnumDisplaySettings(ByVal 0, lNumModes, D(lNumModes))
Do While l
List1.AddItem D(lNumModes).dmPelsWidth & "x" & D(lNumModes).dmPelsHeight & "x" & D(lNumModes).dmBitsPerPel
If lBits = D(lNumModes).dmBitsPerPel And _
lWidth = D(lNumModes).dmPelsWidth And _
lHeight = D(lNumModes).dmPelsHeight Then
List1.ListIndex = List1.NewIndex
End If
lNumModes = lNumModes + 1
If lNumModes > lMaxModes Then
lMaxModes = lMaxModes + 8
ReDim Preserve D(0 To lMaxModes) As DEVMODE
End If
l = EnumDisplaySettings(ByVal 0, lNumModes, D(lNumModes))
Loop
lNumModes = lNumModes - 1
End Sub
程序介绍: ◎前言:这是应一个MM的要求,搞了一个类似于知识库的系统,为了方便她快速搜索到需要的文章和问题答案,因此就做成了现在这样的搜索为主的cms,里面存放了大约3000篇以上的知识量,涉及到3大类10几个层面,涵盖了衣食住行、生活娱乐、电脑知识、动植物等,甚至是三国演义和西游记全篇,这个文件这么大,就是因为数据库内容太多了!不过这样大家一下下来就能用了! ◎特点:系统用了智能拆分关键字查询和分类别查询,主要就用到3个文件,包括一个错误提示页!后台可要可不要,自己掂量掂量看看是否需要就是! ◎设计:界面比较漂亮,完全是down 别人的,因为过年了,设计师都忙着回家,没空帮我,不过的确很不错,希望你会和我一样喜欢!logo和head 都留空,你可以自己进images修改它,想取什么名称就取什么名称, ◎安全:因为我也要回家过年,而且这本身就只针对MM个人电脑使用,本人没怎么认真对待,(惭愧~~~)但对于普通的菜鸟,应该是没问题的,如果你是入侵高手,建议自己在检测和修缮下,如果可以,到我们的论坛发表下! ◎其他:后台可以设置这个站点的名称和网站开关,也可以屏蔽指定的IP访问,由于我是拷贝CMS的config,因为没有删除其他的内容,(再次惭愧~~,)貌似没什么影响!如果你需要本地测试,建议把数据库备份,然后删除2500篇内容,不然会影响你测试速度,尤其是服务器配置不好的同志! ◎最后:本程序是小治技术社区的坏孩子作品,感谢社区的编程高手对本人给与技术上的指点!发布此版本旨在与众网友交流学习,整理过程中较为仓促,难免有疏漏,大家提出指正。

7,789

社区成员

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

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