天天看點

另類屏蔽系統鍵(Ctrl+Alt+Del)兼談www.vbaccelerator.com網站

        學習技術最好的方式就是拜讀優秀的源碼,不僅讓你學習到先進的技術,更教會你如何編碼:編碼的風格、注釋、思路等等。這段時間我給我自己定了一個目标,就是研究優秀的源碼:MenuHook、Skins、Form++等等。

 '*************************************************************************

'**函 數 名:Create

'**輸    入:ByVal sDesktopName(String) -

'**輸    出:無

'**功能描述:建立一個指定名稱的左面

'**全局變量:

'**調用子產品:

'**作    者:葉帆

'**日    期:2005-12-27 12:01:48

'**修 改 人:

'**日    期:

'**版    本:V1.0.3

'*************************************************************************

Public Sub Create(ByVal sDesktopName As String)

    Dim lR As Long

    '傳回目前線程所在的桌面句柄

    m_hDesktopThreadOld = GetThreadDesktop(GetCurrentThreadId())

    '判斷DLL調用是否有誤

    ApiErrorHandler Err.LastDllError, (m_hDesktopThreadOld = 0)

    '目前選擇的桌面

    m_hDesktopInputOld = OpenInputDesktop(0, False, DESKTOP_SWITCHDESKTOP)

    ApiErrorHandler Err.LastDllError, (m_hDesktopInputOld = 0)

    '建立桌面

    m_hDesktop = CreateDesktop(StrPtr(sDesktopName), ByVal 0&, ByVal 0&, 0, GENERIC_ALL, ByVal 0&)

    ApiErrorHandler Err.LastDllError, (m_hDesktop = 0)

    If Not (m_hDesktop = 0) Then

        lR = SetThreadDesktop(m_hDesktop)

        lR = SwitchDesktop(m_hDesktop)

        m_sDesktop = sDesktopName

    End If

End Sub

'**函 數 名:ClearUp

'**輸    入:無

'**功能描述:

'**日    期:2005-12-27 13:00:27

Public Sub ClearUp()

    If Not (m_hDesktopInputOld = 0) Then

        SwitchDesktop m_hDesktopInputOld           '設定為預設的桌面

        m_hDesktopInputOld = 0

    If Not (m_hDesktopThreadOld = 0) Then

        SetThreadDesktop m_hDesktopThreadOld       '預設原桌面線程

        m_hDesktopThreadOld = 0

        CloseDesktop m_hDesktop                    '關閉新建立的桌面

        m_hDesktop = 0

==========================================

      仔細研究網站上面的源碼,你發現幾乎所有的源碼都會引用一個SSubTmr6.dll元件,其實這個元件是VB開發的一個COM(程序内元件),實作的就是視窗的子類功能(此外包含一個API 建立的定時器)。

      此外用的最多的就是GUI庫的API,大都是建立一個記憶體DC,在此基礎上用API進行記憶體DC操作。由于我MFC大部分做的都是背景驅動,是以GUI的知識掌握不太多,是以看這部分就比較吃力,是以我覺的要想學習好windows程式設計,VC必須要學,因為它從底層向你展現程式實作的細節,你能了解并且可以設計出更進階的應用。

     談點自己的感觸:如果把VB僅僅當成一個工具,那是非常好的事,如果把它作為全部,那是最可悲的事。觀摩高手的編碼,無一不顯示這個高手對底層精湛的了解。讀讀梁肇新的《程式設計高手箴言》也許你感悟更多。

繼續閱讀