學習技術最好的方式就是拜讀優秀的源碼,不僅讓你學習到先進的技術,更教會你如何編碼:編碼的風格、注釋、思路等等。這段時間我給我自己定了一個目标,就是研究優秀的源碼: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僅僅當成一個工具,那是非常好的事,如果把它作為全部,那是最可悲的事。觀摩高手的編碼,無一不顯示這個高手對底層精湛的了解。讀讀梁肇新的《程式設計高手箴言》也許你感悟更多。