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

fling_boy (男孩) 请来,使用API函数改变分辨率。。。。

楼主echos(走来走去)2002-03-08 08:56:50 在 VB / API 提问

Option     Explicit  
               
      Private     Type     RECT  
                      Left     As     Long  
                      Top     As     Long  
                      Right     As     Long  
                      Bottom     As     Long  
      End     Type  
           
      Private     Declare     Function     ChangeDisplaySettings     Lib     "user32"     Alias     "ChangeDisplaySettingsA"     _  
                  (lpDevMode     As     Any,     ByVal     dwflags     As     Long)     As     Long  
      Private     Declare     Function     EnumDisplaySettings     Lib     "user32"     Alias     "EnumDisplaySettingsA"     _  
                  (ByVal     lpszDeviceName     As     String,     ByVal     iModeNum     As     Long,     lpDevMode     As     Any)     As     Long  
      Private     Declare     Function     SendMessageByLong&         Lib     "user32"     Alias     "SendMessageA"     _  
                  (ByVal     hwnd     As     Long,     ByVal     wMsg     As     Long,     ByVal     wParam     As     Long,     ByVal     lParam     As     Long)  
      Private     Declare     Function     InvalidateRect     Lib     "user32"     (ByVal     hwnd     As     Long,     lprect     As     Any,     _  
                  ByVal     bErase     As     Long)     As     Long  
      Private     Declare     Function     PostMessage     Lib     "user32"     Alias     "PostMessageA"     (ByVal     hwnd     As     Long,     _  
              ByVal     wMsg     As     Long,     ByVal     wParam     As     Long,     ByVal     lParam     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(1     To     32)     As     Byte  
                      dmLogPixels     As     Integer  
                      dmBitsPerPel     As     Long  
                      dmPelsWidth     As     Long  
                      dmPelsHeight     As     Long  
                      dmDisplayFlags     As     Long  
                      dmDisplayFrequency     As     Long  
                      dmICMMethod     As     Long  
                      'Windows     95     only  
                      dmICMIntent     As     Long  
                      '     Windows     95     only  
                      dmMediaType     As     Long  
                      '     Windows     95     only  
                      dmDitherType     As     Long  
                      '     Windows     95     only  
                      dmReserved1     As     Long  
                      '     Windows     95     only  
                      dmReserved2     As     Long  
                      '     Windows     95     only  
              End     Type  
               
      Const     DM_BITSPERPEL     =     &     H40000  
      Const     DM_PELSWIDTH     =     &     H80000  
      Const     DM_PELSHEIGHT     =     &     H100000  
      Const     DM_DISPLAYFLAGS     =     &     H200000  
      Const     DM_DISPLAYFREQUENCY     =     &     H400000  
      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     CDS_UPDATEREGISTRY     =     1  
      Const     CDS_FORCE     As     Long     =     &     H80000000  
      Const     CDS_RESET     =     &     H40000000  
      Const     HWND_BROADCAST     =     &     HFFFF&      
      Const     WM_SYSCOLORCHANGE     =     &     H15  
      Const     WM_PALETTECHANGED     =     &     H311  
      Const     WM_DISPLAYCHANGE     =     &     H7E  
      Const     WM_SETTINGCHANGE     =     &     H1A  
      Dim     ModeCube(960)     As     DEVMODE  
      Dim     lproc     As     Long  
                       
       
      Sub     LoadDisplayMode()  
      Dim     i     As     Long  
      Dim     l1     As     Long  
      Dim     astr     As     String  
                      i     =     0  
                      '遍历所有的显示模式并在List1中显示出来  
                      Do  
                                      ModeCube(i).dmFields     =     DM_BITSPERPEL     Or     DM_PELSWIDTH     Or     DM_PELSHEIGHT     Or     _  
                                      DM_DISPLAYFLAGS     Or     DM_DISPLAYFREQUENCY  
                                      ModeCube(i).dmSize     =     Len(ModeCube(i))  
                                      '获得显示模式并保存到数组中  
                                      l1     =     EnumDisplaySettings(vbNullString,     i,     ModeCube(i))  
                                      If     l1     Then  
                                                      astr     =     Str$(ModeCube(i).dmPelsWidth)     +     "*"     +     Trim$(Str$(ModeCube(i).dmPelsHeight))     +     "     "  
                                                      Select     Case     ModeCube(i).dmBitsPerPel  
                                                                      Case     4  
                                                                                      astr     =     astr     +     "16色"     +     "刷新频率"     +     Str(ModeCube(i).dmDisplayFrequency)  
                                                                      Case     8  
                                                                                      astr     =     astr     +     "256色"     +     "刷新频率"     +     Str(ModeCube(i).dmDisplayFrequency)  
                                                                      Case     16  
                                                                                      astr     =     astr     +     "16位高彩"     +     "刷新频率"     +     Str(ModeCube(i).dmDisplayFrequency)  
                                                                      Case     24  
                                                                                      astr     =     astr     +     "24位真彩"     +     "刷新频率"     +     Str(ModeCube(i).dmDisplayFrequency)  
                                                                      Case     Else  
                                                                                      astr     =     astr     +     Str$(ModeCube(i).dmBitsPerPel)  
                                                      End     Select  
                                                      i     =     i     +     1  
                                      End     If  
                                      List1.AddItem     astr  
                      Loop     Until     (l1     =     False)     '获得最后一个显示模式之后EnumDisplaySettings会返回False  
      End     Sub  
      Private     Sub     Command1_Click()  
      Dim     aDev     As     DEVMODE  
      Dim     b,     xxa,     xxb,     xxc,     xxd     As     Long  
                      If     List1.ListIndex     <         0     Then     Exit     Sub  
                      aDev     =     ModeCube(List1.ListIndex)  
                      'CDS_FORCE在Microsoft的开发文档中没有说明  
                      b     =     ChangeDisplaySettings(aDev,     CDS_FORCE)  
                      '改变完显示模式设置之后向所有的窗口发送显示模式改变消息  
                      xxc     =     SendMessageByLong(HWND_BROADCAST,     WM_SYSCOLORCHANGE,     0&     ,     0&     )  
                      xxa     =     SendMessageByLong(HWND_BROADCAST,     WM_PALETTECHANGED,     Me.hwnd,     0&     )  
                      xxb     =     PostMessage(HWND_BROADCAST,     WM_SYSCOLORCHANGE,     0&     ,     0&     )  
                      xxd     =     InvalidateRect(0&     ,     ByVal     0,     1&     )  
      End     Sub  
      Private     Sub     Form_Load()  
                      Command1.Caption     =     "使用API函数改变分辨率"  
                      Command2.Caption     =     "使用QuickRes库"  
                      LoadDisplayMode  
      End     Sub  
   
      //来拿分  
  问题点数:40、回复次数:1Top

1 楼fling_boy(昨日重现)回复于 2002-03-08 08:58:30 得分 40

thank   you:).Top

相关问题

  • api函数
  • 求API函数?
  • API函数
  • API函数
  • API 函数!
  • api函数求教
  • api函数问题?
  • 关于API函数
  • api函数查看
  • 关于api函数

关键词

  • byval
  • as long
  • lpdevmode
  • alias
  • wmsg
  • private declare
  • lib
  • user32
  • hwnd
  • wparam

得分解答快速导航

  • 帖主:echos
  • fling_boy

相关链接

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

广告也精彩

反馈

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