CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VB >  基础类

用哪个API 动态改变屏幕的分辨率??(回答立即给分)

楼主dragon525()2002-11-23 22:10:29 在 VB / 基础类 提问

我想在我的程序运行的时候,改变屏幕的分辨率。当我的程序退出后再恢复分辨率!  
  回答立即给分) 问题点数:50、回复次数:4Top

1 楼zyl910(编程的乐趣在于编程控制硬件,与用图形学实现绚丽效果)回复于 2002-11-23 22:25:06 得分 10

http://expert.csdn.net/Expert/topic/846/846849.xml?temp=.2693903Top

2 楼junwhj(http://www.grid2000.com/cn)回复于 2002-11-23 22:43:11 得分 20

Option   Explicit  
   
  Private   Declare   Function   EnumDisplaySettings   _  
          Lib   "user32"   Alias   "EnumDisplaySettingsA"   (   _  
          ByVal   lpszDeviceName   As   Long,   _  
          ByVal   iModeNum   As   Long,   _  
          lpDevMode   As   Any)   As   Boolean  
           
  Private   Declare   Function   ChangeDisplaySettings   _  
          Lib   "user32"   Alias   "ChangeDisplaySettingsA"   (   _  
          lpDevMode   As   Any,   _  
          ByVal   dwflags   As   Long)   As   Long  
   
  Private   Type   DEVMODE  
          dmDeviceName   As   String   *   32  
          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   *   32  
          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_DISPLAYFREQUENCY   =   &H400000  
   
   
  Private   Sub   ChangeRes(lngPelsWidth   As   Long,   _  
                                              lngPelsHeight   As   Long,   _  
                                              intBitsPerPel   As   Integer,   _  
                                              lngDisplayFrequency   As   Long)  
          Dim   dm   As   DEVMODE  
           
          Call   EnumDisplaySettings(0&,   -1,   dm)  
           
          dm.dmFields   =   DM_PELSWIDTH   Or   _  
                                      DM_PELSHEIGHT   Or   _  
                                      DM_BITSPERPEL   Or   _  
                                      DM_DISPLAYFREQUENCY  
          dm.dmPelsWidth   =   lngPelsWidth  
          dm.dmPelsHeight   =   lngPelsHeight  
          dm.dmBitsPerPel   =   intBitsPerPel  
          dm.dmDisplayFrequency   =   lngDisplayFrequency  
           
          Call   ChangeDisplaySettings(dm,   1)  
  End   Sub  
   
   
  Private   Sub   Command1_Click()  
          Call   ChangeRes(800,   600,   16,   75)   '75是刷新率  
  End   Sub  
   
  Private   Sub   Form_Load()  
   
  End   Sub  
  Top

3 楼dragon525()回复于 2002-11-23 22:43:20 得分 0

I   know!  
  谢谢你!  
  我得仔细的看看!Top

4 楼SeeMeStudio(小章)回复于 2002-11-24 00:14:13 得分 20

详细的代码示范,请看。  
   
   
  ‘---------------以下代码用于得到屏幕的设置参数--------------    
  Declare   Function   GetDeviceCaps   Lib    
  "gdi32"   (ByVal   hdc   As   Long,    
  ByVal   nIndex   As   Long)   As   Long    
            ‘取指定设备信息API函数    
  Public   Const   HORZRES   =   8    
                ‘三个屏幕常量    
  Public   Const   VHORZRES   =   10    
  Public   Const   BITSPIXEL   =   12    
  ‘---------------通过字符COPY进行数据类型转换--------------    
  Private   Declare   Function   lstrcpy   Lib   "kernel32"    
  Alias   "lstrcpyA"   (lpString1   As   Any,   lpString2   As   Any)   As   Long          
  ‘------------------以下结构用于屏幕的初始化-----------------    
  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    
  ‘------------------设置屏幕的核心API-----------------    
  Private   Declare   Function   ChangeDisplaySettings    
  Lib   "User32"   Alias   "ChangeDisplaySettingsA"    
  (ByVal   lpDevMode   As   Long,   ByVal   dwflags   As   Long)   As   Long    
  ‘------------------设置屏幕的函数-----------------    
  Public   Function   SetDispMode(Width   As   Integer,    
  Height   As   Integer,   Color   As   Integer)   As   Long    
  (SetDispMode是自己构造的更改屏幕设置的函数来,    
  它的三个参数Width、Height和Color分别是屏幕的横向分辨率、    
  纵向分辨率,颜色位数,其值可为24,16,0等。0为原有颜色设置。)    
    Const   DM_PELSWIDTH   =   &H80000    
    Const   DM_PELSHEIGHT   =   &H100000    
    Const   DM_BITSPERPEL   =   &H40000    
    Dim   NewDevMode   As   DEVMODE    
    Dim   pDevmode   As   Long    
    With   NewDevMode    
      .dmSize   =   122    
      If   Color   =   0   Then        
        ‘如果Color=0则只改变屏幕的分辨率,而不改变色彩。    
        .dmFields   =   DM_PELSWIDTH   Or   DM_PELSHEIGHT    
      Else          
                    ‘如果Color不等0则改变屏幕的分辨率和色彩。    
        .dmFields   =   DM_PELSWIDTH   Or   DM_PELSHEIGHT   Or   DM_BITSPERPEL    
      End   If    
      .dmPelsWidth   =   Width      
      .dmPelsHeight   =   Height    
      If   Color   <   >   0   Then    
      .dmBitsPerPel   =   Color    
      End   If    
    End   With    
      pDevmode   =   lstrcpy(NewDevMode,   NewDevMode)      
  ‘得到一个指向NewDevMode结构的Long型的指针。    
      ChangeDisplaySettings   pDevmode,   0    
  End   Function    
   
  ----   三、在工程窗体中,加入两个按钮Command1和Command2,其Caption属性分别为“800x600x16”和“恢复原设置”。    
   
  ----   其程序代码为:    
   
    ‘窗口的“通用|声明”区    
    Option   Explicit    
    Dim   H,   V,   Color   As   Long      
          ’声名变量,用于保存最初屏幕设置    
    Private   Sub   Form_Load()    
  ‘---------------以下代码用于得到最初的屏幕设备--------------    
      H   =   GetDeviceCaps(Form1.hdc,   HORZRES)    
      V   =   GetDeviceCaps(Form1.hdc,   VHORZRES)    
      Color   =   GetDeviceCaps(Form1.hdc,   BITSPIXEL)    
    End   Sub    
   
    Private   Sub   Command1_Click()    
        ‘调用SetDispMode函数改变屏幕设置    
        SetDispMode   800,   600,   16    
    End   Sub    
   
    Private   Sub   Command2_Click()    
        ‘恢复最初屏幕设置    
      SetDispMode   Cint(H),   Cint(V),   Cint(Color)    
    End   Sub    
   
  ----   四、将程序编译执行。    
  Top

相关问题

  • API如何获得屏幕分辨率
  • 怎样动态调整屏幕的分辨率
  • 关于 ChangeDisplaySettings 动态调整屏幕分辨率
  • pb程序中如何动态改变屏幕分辨率?
  • 屏幕分辨率
  • 如何更改屏幕分辨率,WINDOWS有否API提供?
  • 请问获得屏幕分辨率的API函数是什么?
  • 那个API函数能获取屏幕的分辨率
  • vb.net如何把一个窗体动态的放置到分辨率不同的屏幕的中心
  • 怎么用api函数调整屏幕分辨率(1024*768)和颜色(真彩色..)?

关键词

  • 屏幕
  • 代码
  • newdevmode
  • integer
  • dm
  • setdispmode
  • dmfields
  • pelsheight
  • pelswidth
  • getdevicecaps

得分解答快速导航

  • 帖主:dragon525
  • zyl910
  • junwhj
  • SeeMeStudio

相关链接

  • Visual Basic类图书
  • Visual Basic类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo