• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
    • 軟件測試技術
    • 軟件測試博客
    • 軟件測試視頻
    • 開源軟件測試技術
    • 軟件測試論壇
    • 軟件測試沙龍
    • 軟件測試資料下載
    • 軟件測試雜志
    • 軟件測試人才招聘
      暫時沒有公告

    字號: | 推薦給好友 上一篇 | 下一篇

    用VB制作TopMost類型窗口

    發布: 2007-7-14 20:28 | 作者: 佚名    | 來源: 網絡轉載     | 查看: 14次 | 進入軟件測試論壇討論

    領測軟件測試網 TopMost這個詞也許你很陌生,但具有TopMost窗口的軟件你應該早就接觸過,如Office97、網絡吸血鬼、IE等。所謂TopMost窗口是指哪些始終出現在桌面的最前方且不會被其它窗口覆蓋的窗口,如網絡吸血鬼中的下載圖標。
      一般憎況下,在運行VB程序時,窗口總有可能會被其它程序的窗口所覆蓋。如何在自己的應用程序中實現TopMost類型的窗口呢?我們可以通過調用Windows API函數SetWindowPos來實現。
      一、SetWindowPos函數介紹
      SetWindowPos函數功能是將一個窗口在三維空間中移動,利用它,你可以改變一個窗口的位置,甚至可以在Z軸上改變(Z軸決定了一個窗口和其它窗口的前后關系),你還可以改變窗口的尺寸。為了實現TopMost類型的窗口,我們只需調用該函數,將窗口放在所有窗口的前面并永遠保持在最前面即可。要想在VB中使用SetWindowPos函數,必須在程序的代碼模塊中進行如下的函數聲明:
      Declare Function SetwindowPos Lib "user32.dll" (ByVal hwnd As Long,ByVal hWndInsertAfter As Long,ByVal x As Long,ByVal y As Long,ByVal cx As Long,ByVal cy As Long,ByVal wFlags as Long)As Long
      SetWindowPos函數各個參數的含義見表1。
    表1 SetWindowPos函數的參數解釋

    參數名 參數含義
    hwnd 要移動的窗口的句柄(可以用窗體的hwnd屬性)
    hWndInsertAfter 關于如何在Z軸上放置窗口的標記(具體見表2)
    x 相當于窗口的Left屬性
    y 相當于窗口的Top屬性
    cx 相當于窗口的Right屬性
    cy 相當于窗口的Bottom屬性
    wFlags 關于如何移動窗口的標記(具體見表3)

    表2 HWndInsertAfter參數的可能取值及含義

    hWndInsertAfter的可能取值 功能
    某一窗口的句柄 將窗口放在該句柄指定的窗口后面
    HWND_BOTTOM(1) 把窗口放在Z軸的最后,即所有窗口的后面
    HWND_TOP(0) 將窗口放在Z軸的前面,即所有窗口的前面
    HWND_TOPMOST(-1) 使窗口成為“TopMost”類型的窗口,這種類型
    的窗口總是在其它窗口的前面,真到它被關閉
    HWND_NOTOPMOST(-2) 將窗口放在所有“TopMost”類型
    窗口的后面、其它類型窗口的前面

    表3 wFlags參數的可能值及含義

    wFlags參數的可能值 功能
    SWP_DRAWFRAME(&H20) 移動窗口后重畫窗口及其上的所有內容
    SWP_HIDEWINDOW(&H80) 隱藏窗口,窗口隱藏后既不出現在屏幕上也不出現在任
    務欄上,但它仍然處于激活狀態
    SWP_NOACTIVATE(&H10) 窗口移動后不激活窗口,當然,如果窗口在移動前就是
    激活的則例外
    SWP_NOCOPYBITS(&H100) 當窗口移動后,不重畫它上面的任何內容
    SWP_NOMOVE(&H2) 不移動窗口(即忽略X和Y參數)
    SWP_NOSIZE(&H1) 不改變窗口尺寸(即忽略Cx和Cy參數)
    SWP_NOREDRAW(&H8) Do not remove the image of the window in its former position
    from the screen. In other words,leave behind a ghost image
    of the window in its old position
    SWP_NOZORDER(&H4) 不改變窗口聽Z軸位置(即忽略hWndInsertAfter參數)
    SWP_SHOWWINDOW(&H40) 顯示窗口(之前必須使用過SWP_HIDEWINDOW
    隱藏窗口)

       前面已提到,利用SetWindowPos函數可以決定窗口在Z軸中的位置,具體如何放置,需根據表2給hWndInsertAfter參數賦予合適的值。
       另外,wFlags參數為SetWindowPos函數移動窗口提供了附加的特性,我們可以通過or運算將表3中若干個wFlags結合在一起使用,如SWP_NOMOVE Or SWP_NOSIZE既不移動窗口又不改變窗口的尺寸。但是要注意不要將功能沖突的值結合使用,如SWP_HIDEWINDOW Or SWP_SHOWWINDOW。
    二、程序舉例
       下面,我們以一個簡單的例子說明SetWindowPos函數的用法及如何實現TopMost類型窗口。新建工程,在普通窗體Form1上放置兩個命令按鈕cmdNormal和cmdTopMost,命令按鈕的Caption屬性分別為“變成普通窗口”和“變成TopMost窗口”。cmdNormal的Enabled屬性為False。為工程添加代碼模塊Moudall,在其中放置如下聲明代碼:
    Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long,ByVal hWndInsertAfter As Long,ByVal x As Long,ByVal y As Long, ByVal cx As Long, ByVal cy As Long,ByVal wFlags As Long) As Long
    Public Const SWP_NOMOVE= &H2 '不移動窗體
    Public Const SWP_NOSIZE=&H1 '不改變窗體尺寸
    Public Const Flag=SWP_NOMOVE Or SWP_NOSIZE
    Public Const HWND_TOPMOST=-1 '窗體總在最前面
    Public Const HWND_NOTOPMOST=-2 '窗體不在最前面
    為窗體添加代碼如下:
    Private Sub cmdNormal_Click()
       cmdTopMost.Enabled=True
       cmdNormal. Enabled= False
       Form1.Captio = "現在是普通窗口"
       SetWindowPos Form1.hwnd,HWND_NOTOPMOST,0,0,0,0,Flag
    End Sub
    Private Sub cmdTopMost_Click()
       cmdTopMost.Enabled = False
       cmdNormal.Enabled = True
       Form1.Caption = "現在是TopMost窗口"
       SetWindowPos Form1.hwnd,HWND_TOPMOST,0,0,0,0,Flag
    End Sub
       按下F5,運行程序,單擊“變成TopMost窗體”命令按鈕,此時窗口即成為TopMost類型。隨意打開桌面上的其它窗口,Form1總是處在其它窗口的前面;如果單擊“變成普通窗體”按鈕。則一切又恢復正常,一旦打開了其它窗口,則其它窗口會將Form1窗口覆蓋。

    文章來源于領測軟件測試網 http://www.kjueaiud.com/


    關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
    版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
    北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備2023014753號-2
    技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

    軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>