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

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

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

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

    用VisualBasic創建復雜窗體

    發布: 2007-5-25 09:21 | 作者: ecomer | 來源: 互聯網 | 查看: 34次 | 進入軟件測試論壇討論

    領測軟件測試網 MILY: 宋體; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">

    Visual Basic創建高科技窗體

     By Dale E. Lehman

     

    那不是窗體!

    有時候你會偶爾遇到一個windows應用程序,它不像普通windows應用程序。你知道我是什么意思。Windows應用程序是矩形的用戶界面。正是如此。但有時,你會看到一個應用程序具有圓形的角,甚至有時具有近乎瘋狂的奇異形狀的窗體,根本就不像一個windows應用程序。拿Net2Phone 10.6.2作為例子,這兩個頂端的窗體看起來妖艷多姿。但實際上,他們僅僅是兩個“L”形狀的窗體(圖一所示)。如果你同意我的觀點,無論什么時候你遇到類似令你驚異、不知道如何為你自己創建如此玉石般的窗體時,你肯定認為不會用VB去做,不是嗎?

    好,下面有一些好消息:事實上,用VB窗體你可以創建任何眼睛見到的、大腦想象的窗體形狀。你甚至可以創建中間有洞的窗體,或者創建一些由相互分離的區域組成的窗體。

    不好的是,你不能僅僅用VB進行創建。需要的功能依賴于windows圖形用戶接口,這些

    VB不具有。為了得到這些,你需要windows API調用。

    圖一:一個自定義窗體樣式的例子

    Region的基本原理

    創建一個高科技的窗體的秘密是一個叫做Region的技術。一個Region就是計算機顯示器的一個區域。Windows應用程序用Region在屏幕上繪制輸出和執行點擊測試(測試光標的位置)。簡單來說,一個Region就是幾個特定的輸入輸出能夠在顯示器上發生的區域。GDI

    構造了三種可用的Region:矩形、橢圓形和多邊形。API調用用于創建和操縱Region。

    所以在VB窗體里需要做什么呢?很簡單,每一個窗體都是在Region里邊被繪制出的。事實上,每一個窗口都是在Region里被繪制的。你可能知道,windows操作系統定義了一個窗口作為一個區域,該區域接收該應用程序的輸入,并且顯示輸出。聽起來非常類似于定義一個Region。事實上,窗口是比Region復雜得多的。窗口可以呈現多種外觀:窗體、按鈕、文本框等等。然而總的來說,窗口被繪制在一個Region里邊。所以我們可以說,每一個窗口擁有一個Region,所以VB窗體擁有一個Region。

    通常情況下,一個窗體被繪制在一個矩形的Region里。事實上,VB幫助里邊基本不談論Region。操作系統自動為每一個窗體分派一個矩形Region。VB并不提示你去改變這些。因此,在設計模式里,你必須經常以矩形窗體工作。但是在少許簡單的API的幫助下,你可以在運行的時候改變個窗體的Region。

    以圓形運行

    讓我們看看最簡單的二者選其一的Region,一個橢圓。Windows操作系統提供了一個函數CreateEllipticRgn,該函數提供一個矩形的左上角和右下角坐標。該函數記下了一個在此矩形里邊的一個橢圓,用來創建需要的Region。

    一旦你得到這個Region的句柄,你要把它指派到你的窗體里。為此,用CreateEllipticRgn函數,該函數把句柄提供給窗口和Region,還要提供一個布爾型的聲明,用以確定當分派

    Region后窗口是否重繪。通常情況下,你想把最后一個聲明設為TRUE,下面是這些代碼:

    Public Declare Function CreateEllipticRgn _
                   Lib "gdi32" (ByVal X1 As Long, _
                                ByVal Y1 As Long, _
                                ByVal X2 As Long, _
                                ByVal Y2 As Long) As Long

     

    Public Declare Function SetWindowRgn _
                   Lib "user32" (ByVal hWnd As Long, _
                                 ByVal hRgn As Long, _
                                 ByVal bRedraw As Boolean) As Long

     

    Public Sub CreateEllipseFromWindow(ByRef oWindow As Object)
        Dim lRight As Long
        Dim lBottom As Long
        Dim hRgn As Long

        With oWindow
            lRight = .Width / Screen.TwipsPerPixelX
            lBottom = .Height / Screen.TwipsPerPixelY
            hRgn = CreateEllipticRgn(0, 0, lRight, lBottom)
            SetWindowRgn .hWnd, hRgn, True
        End With
    End Sub

     

    Private Sub Form_Load()
        CreateEllipseFromWindow Me
    End Sub

    應當注意到在這些代碼中,要用到左上角和右下角的坐標作為橢圓的基礎。當工程啟動以后,該窗體最初有我們在設計的時候給定的尺寸,所以橢圓要基于那些數據。同時要注意,為了得到正確的尺寸,我們需要把高度和寬度從緹轉換到像素。缺省狀態下,VB用緹作為屏幕的尺寸。當用到Region時,需要以像素記數。Screen.TwipsPerPixelXScreen.TwipsPerPixelY函數使得該轉換容易進行。

    當你運行這些代碼時,你會發現該窗體的確以橢圓方式出現,但是是一個非常難看的橢圓。(圖二)問題出在VB的窗體基于矩形的Region上面。然而窗體是不允許繪制在橢圓Region的外面的。所以結果是,矩形的角被嚴格的切掉了!你肯定不想做一個像這樣的窗體的!

     

    圖二:自定義橢圓窗體的最初外觀

    第二個明顯的問題是改變該窗體的大小。

    待續……

     

     

     

     

     

     

    延伸閱讀

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


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