乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      利用VB動態(tài)改變Windows顯示模式的兩種方法 - 水木森林(專業(yè)電腦教程網(wǎng))|itus...

       悟靜 2009-07-22
      在Windows系統(tǒng)中,系統(tǒng)提供了用于動態(tài)改變屏幕分辨率和顯示顏色數(shù)的API函數(shù)。在這篇文章中,我將介紹使用兩種方法改變Windows的顯示模式。

       

        要改變顯示模式,首先要獲得顯示系統(tǒng)支持的顯示模式。顯示系統(tǒng)支持的所有的顯示模式是利用API函數(shù)EnumDisplaySettings獲得的。然后有兩種方法切換顯示模式,一種是利用Windows API函數(shù)ChangeDisplaySettings另外一種方法是利用Windows附帶的一個QuickRES庫,通過調(diào)用QuickRES庫實(shí)現(xiàn)顯示模式的切換。

        首先在VB中建立一個工程文件,然后在Form1中加入一個ListBox控件和兩個CommandButton控件,然后在Form1的代碼窗口中加入以下代碼:

        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(63) As DEVMODE

        Dim lproc As Long

        Sub EndApp()

        Icon_Del (Form1.Command1.hwnd)

        End

        End Sub

        Sub ShowIcon()

        Dim l As Long

        If (Icon_Add(Form1.Command1.hwnd, Form1.Picture)) Then

        lproc = SetWindowLong(Form1.Command1.hwnd, GWL_WNDPROC, AddressOf DialogProc)

        Else

        MsgBox (“無法建立程序圖標(biāo)!")

        End

        End If

        End Sub

        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))

        '獲得顯示模式并保存到數(shù)組中

        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色"

        Case 8

        astr = astr + “256色"

        Case 16

        astr = astr +“16位高彩"

        Case 24

        astr = astr + “24位真彩"

        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的開發(fā)文檔中沒有說明

        b = ChangeDisplaySettings(aDev, CDS_FORCE)

        '改變完顯示模式設(shè)置之后向所有的窗口發(fā)送顯示模式改變消息

        xxc= Send Message ByLong(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 Command2_Click()

        Dim aDev As DEVMODE

        Dim tempVar As String

        Dim RetVal

        Dim shellString As String

        If List1.ListIndex < 0 Then Exit Sub

        aDev = ModeCube(List1.ListIndex)

        tempVar = LTrim$(Str(aDev.dmPelsWidth)) + “x" + LTrim$(Str(aDev.dmPelsHeight)) +

        “x" + LTrim$(Str(aDev.dmBitsPerPel))

        Debug.Print tempVar

        shellString =“Rundll.exe DeskCp16.dll,QUICKRES_RUNDLLENTRY "

        shellString = shellString + tempVar

        '調(diào)用Windows中的QuickRes庫來改變顯示模式,如果你的系統(tǒng)中沒有安裝QuickRes系統(tǒng)將會產(chǎn)生一個錯誤

        RetVal = Shell(shellString, 1)

        End Sub

        Private Sub Form_Load()

        Command1.Caption = “使用API函數(shù)改變分辨率"

        Command2.Caption =“使用QuickRes庫"

        LoadDisplayMode

        End Sub

        運(yùn)行程序,點(diǎn)擊選擇ListBox中的顯示模式,然后按下“使用API函數(shù)改變分辨率”鍵或者“使用QuickRes庫”鍵,就可以切換顯示模式到所需要的模式了。

        需要說明的一點(diǎn)是,在程序中的改變顯示模式的語句 b = ChangeDisplaySettings(aDev, CDS_FORCE) 中的常量CDS_FORCE是一個未公開(UnDocument)的定義,在微軟的幫助文檔是沒有有關(guān)的說明的。

        以上的程序在Win98、VB6下運(yùn)行通過。(長沙 陳銳)

        本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多