香港巴士維基

Page last edited 2,860 天 1 小時 前
出自 shoutwiki
前往: 導覽搜尋

http://www.cgs.tw/nucleus/blog/1 http://nknucc.nknu.edu.tw/~jwu/c/cpg.htm


本文的 目的 是 在介紹 MS-DOS 下的環境, 以 TURBO C 為編譯器,來介紹 C 程式。 本 文 主 要 內 容 如 下 :

   * 第 0 章 TURBO C 簡介
         o 第 0.1 節 TURBO C 簡介
         o 第 0.2 節 PC 硬体結構 簡介
         o 第 0.3 節 MS-DOS 6.2 作業系統 (Operating System) 簡介
               + 第 0.3.1 節 MS-DOS 的 檔案 系統
               + 第 0.3.2 節 MS-DOS 指令
               + 第 0.3.3 節 MS-DOS 如何 執行指令
               + 第 0.3.4 節 MS-DOS 輸入 及 輸出 轉向 
         o 第 0.4 節 程式語言 簡介 
   * 第 1 章 C 程式 簡介
   * 第 2 章 常數,變數與資料型態
         o 第 2.1 節 資料型態
               + 第 2.1.1 節 資料容量
               + 第 2.1.2 節 資料內部表示 
         o 第 2.2 節 常數
               + 第 2.2.1 節 字元常數
               + 第 2.2.2 節 字串常數
               + 第 2.2.3 節 整數常數
               + 第 2.2.4 節 浮點常數
               + 第 2.2.5 節 符號常數 
         o 第 2.3 節 變數
         o 第 2.4 節 運算子
               + 第 2.4.1 節 算術運算子
               + 第 2.4.2 節 關係運算子
               + 第 2.4.3 節 邏輯運算子 
         o 第 2.5 節 資料型態轉換 
   * 第 3 章 陣列
         o 第 3.1 節 陣列的不可缺
         o 第 3.2 節 陣列的宣告
         o 第 3.3 節 陣列起始值的設定
         o 第 3.4 節 插入排序(insertion sort)
         o 第 3.5 節 矩陣相乘
         o 第 3.6 節 字串
         o 第 3.7 節 作業 3 
   * 第 4 章 指標(pointer)
         o 第 4.1 節 指標 ( pointer ) 與 地址 ( address )
               + 第 4.1.1 節 取址 運算子 &
               + 第 4.1.2 節 間接取值 運算子 *
               + 第 4.1.3 節 直接與間接 定/取 值
               + 第 4.1.4 節 不當的 使用 & 與 * 
         o 第 4.2 節 陣列與指標
               + 第 4.2.1 節 插入排序
               + 第 4.2.2 節 字元 指標 與 整數 指標 
         o 第 4.3 節 二維陣列、 一維陣列 與 指標
         o 第 4.4 節 二維 陣列 與 一維 指標 陣列 
   * 第 5 章 函數
         o 第 5.1 節 函數定義
         o 第 5.2 節 函數宣告
         o 第 5.3 節 函數呼叫
         o 第 5.4 節 函數呼叫 與 函數定義 的關係
         o 第 5.5 節 以 數值方法 來求 實數函數的 根
         o 第 5.6 節 函數呼叫 與 傳地址
         o 第 5.7 節 函數 與 陣列 
   * 第 6 章 遞迴函數
         o 第 6.1 節 數學上的遞迴函數
         o 第 6.2 節 其相對應的 C 程式語言的遞迴函數
         o 第 6.3 節 數學上的遞迴函數公式的求解
         o 第 6.4 節 一些程式執行時間的估計 
   * 第 7 章 延伸性資料型態
         o 第 7.1 節 struct 資料型態的宣告
         o 第 7.2 節 struct 資料型態的使用
               + 第 7.2.1 節 struct 資料型態的變數
               + 第 7.2.2 節 分量
               + 第 7.2.3 節 起始值的設定
               + 第 7.2.4 節 指標與分量
               + 第 7.2.5 節 延伸性資料型態的函數 
         o 第 7.3 節 typedef
         o 第 7.4 節 enum 資料型態
         o 第 7.5 節 union 資料型態
         o 第 7.6 節 延伸性資料型態:struct longint 
   * 第 8 章 C 前置處理
         o 第 8.1 節 #define 巨集的宣告與使用
               + 第 8.1.1 節 常數辨識個體的宣告
               + 第 8.1.2 節 含引數型的巨集指令 
         o 第 8.2 節 #include 的使用
         o 第 8.3 節 #if、#ifdef 等的使用 
   * 第 9 章 變數的生命期與使用範圍
         o 第 9.1 節 區域變數
         o 第 9.2 節 全域變數
         o 第 9.3 節 物件的使用範圍
         o 第 9.4 節 static變數與函數 
   * 第 10 章 程式設計的方式
         o 第 10.1 節 top-down 與 bottom-up 的設計方式
         o 第 10.2 節 檔案指摽
         o 第 10.3 節 argc 與 argv
         o 第 10.4 節 函數的函數參數
         o 第 10.5 節 函數指標陣列 
   * 第 11 章 第一個 C++ 程式
         o 第 11.1 節 第一個 C++ 程式
         o 第 11.2 節 new 與 delete operators 及 iostream.h 檔
         o 第 11.3 節 overloaded functions 
   * 第 12 章 類別與物件的基本架構
         o 第 12.1 節 類似 struct 的類別宣告 與 物件的定義
         o 第 12.2 節 含成員函數的類別宣告 與 物件的定義
         o 第 12.3 節 遞迴式類別宣告
         o 第 12.4 節 二元搜尋樹基本資料結構
         o 第 12.5 節 二元搜尋樹程式 
   * 第 13 章 一些異於 C 程式的 C++ 架構
         o 第 13.1 節 變數 的定義
         o 第 13.2 節 資料成員 與 變數 起始值的設定
         o 第 13.3 節 參考型態(reference type)
               + 第 13.3.1 節 參考型態的變數 -- 變數的別名 (alias)
               + 第 13.3.2 節 參考型態的引數 -- call by reference 
         o 第 13.4 節 const 的宣告
               + 第 13.4.1 節 於 block 中 const 的定義
               + 第 13.4.2 節 與 參考型態引數 的結合
               + 第 13.4.3 節 於 class 中 const 的定義 
         o 第 13.5 節 overloaded 函數
         o 第 13.6 節 函數模式 與 類別模式
         o 第 13.7 節 inline 函數
         o 第 13.8 節 檔案的輸入與輸出格式 
   * 第 14 章 class 的一些基本架構
         o 第 14.1 節 隱藏的 this pointer
         o 第 14.2 節 static data member
         o 第 14.3 節 static member function
         o 第 14.4 節 friend 的標示
               + 第 14.4.1 節 friend functions
               + 第 14.4.2 節 friend classes 
         o 第 14.5 節 operator 
   * 第 15 章 類別 (class) 的繼承性
         o 第 15.1 節 父類別與子類別(base and drived classes)的宣告
         o 第 15.2 節 父類別與子類別的建構函數與解構函數
         o 第 15.3 節 父子類別間起始值的設定
         o 第 15.4 節 成員名稱的覆蓋性
         o 第 15.5 節 子類別使用父類別成員的權限
         o 第 15.6 節 繼承的模式
         o 第 15.7 節 平面圖形 class figure 
   * 第 16 章 類別 (class) 繼承的一些特性
         o 第 16.1 節 類別指標與 class 自動轉換
         o 第 16.2 節 虛擬函數 (virtual functions)
         o 第 16.3 節 抽象類別 (Abstract classes)
         o 第 16.4 節 多重繼承
         o 第 16.5 節 多重繼承所產生的語意不清的問題
         o 第 16.6 節 虛擬父類別 (Virtual base classes) 

回 Homepage


http://caterpillar.onlyfun.net/Gossip/AlgorithmGossip/AlgorithmGossip.htm 「常見程式演算」主要收集一些常見的程式練習題目,您可以藉這些題目培養一些程式設計邏輯的感覺,對題目的分類只是個大概,方便索引而已,實作的部份是使用 C 及 Java。

   *  河內塔
   * 費式數列
   * 巴斯卡三角形
   * 三色棋
   * 老鼠走迷官(一)
   * 老鼠走迷官(二)
   * 騎士走棋盤
   * 八個皇后
   * 八枚銀幣
   * 生命遊戲
   * 字串核對
   * 雙色、三色河內塔
   * 背包問題(Knapsack Problem)

hxtp://w3.tkgsh.tn.edu.tw/rose/VB.htm http://tw.myblog.yahoo.com/jw!LxH6eS6TGQX4FcYun7sK4Pt6Vg http://tw.myblog.yahoo.com/clonin-vb/archive?l=f&id=13 http://www2.kuas.edu.tw/prof/hsuqc/3/premea/3/web/4.htm


'列出全部環境變數 Private Sub Command1_Click() Dim EnvString, Indx, Msg, PathLen ' 宣告變數。

 Indx = 1 ' 設定索引值的初值為 1。
 Do
      EnvString = Environ(Indx) ' 取得環境變數。
      List1.AddItem EnvString
      If Left(EnvString, 5) = "PATH=" Then ' 檢查是否為 PATH 項。
          PathLen = Len(Environ("PATH")) ' 取得長度。
          Msg = "PATH entry = " & Indx & " and length = " & PathLen
          Exit Do
      Else
          Indx = Indx + 1 ' 若不是一個 PATH 項,
      End If ' 則跳過此項,繼續檢查下一項。
 Loop Until EnvString = ""
 If PathLen > 0 Then
     MsgBox Msg ' 顯示訊息。
 Else
     MsgBox "No PATH environment variable exists."
 End If

End Sub ................................................................... 變更螢幕解析度與顏色數 一個Command1(CommandBox),VS1(VScrollBar),HS1(HScrollBar),Label1,Label2 表單: Option Explicit Dim Ramp1(0 To 255, 0 To 2) As Integer Dim Ramp2(0 To 255, 0 To 2) As Integer Dim ResCBData() As String Dim nowResCBData As String Dim ScreenHDC As Long

Private Sub Command1_Click() Dim temp() As String Dim ret As Long Dim b As Boolean Dim devm As DEVMODE Dim scInfo As Long Dim erg As Long ret = MsgBox("確定要變更螢幕解析度與顏色數嗎?因為隨意改變將有可能導致螢幕燒毀!", vbQuestion + vbYesNo, "藍騎螢幕調整程式") If ret = vbYes Then temp() = Split(ResCBData(HS1.Value), "x") b = EnumDisplaySettings(0, 0, devm) devm.dmFields = DM_PELSWIDTH Or DM_PELSHEIGHT Or DM_BITSPERPEL devm.dmPelsWidth = Val(temp(0)) devm.dmPelsHeight = Val(temp(1)) devm.dmBitsPerPel = Val(Replace(temp(2), "bits", "")) erg = ChangeDisplaySettings(devm, CDS_TEST) If erg = DISP_CHANGE_SUCCESSFUL Then erg = ChangeDisplaySettings(devm, CDS_UPDATEREGISTRY) scInfo = devm.dmPelsHeight * 2 ^ 16 + devm.dmPelsWidth SendMessage HWND_BROADCAST, WM_DISPLAYCHANGE, ByVal devm.dmBitsPerPel, ByVal scInfo End If End If

End Sub

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer) If KeyCode = vbKeyEscape Then Unload Me End If End Sub

Private Sub Form_Load() Dim devm As DEVMODE ScreenHDC = GetDC(0) GetDeviceGammaRamp ScreenHDC, Ramp1(0, 0) Call EnumDisplaySettings(0&, ENUM_CURRENT_SETTINGS, devm) nowResCBData = CStr(devm.dmPelsWidth) + "x" + CStr(devm.dmPelsHeight) + "x" + CStr(devm.dmBitsPerPel) + "bits" Call EnumDisplay End Sub

Private Sub Form_Unload(Cancel As Integer) SetDeviceGammaRamp ScreenHDC, Ramp1(0, 0) End Sub Private Sub EnumDisplay() Dim devm As DEVMODE Dim ret As Boolean Dim i As Integer, j As Integer Do ret = EnumDisplaySettings(0&, i, devm) If ret = False Then Exit Do ReDim Preserve ResCBData(i) ResCBData(i) = CStr(devm.dmPelsWidth) + "x" + CStr(devm.dmPelsHeight) + "x" + CStr(devm.dmBitsPerPel) + "bits" If ResCBData(i) = nowResCBData Then j = i End If i = i + 1 Loop HS1.Min = 0 HS1.Max = i - 1 HS1.Value = j Label2.Caption = ResCBData(j) End Sub

Private Sub HS1_Change() Label2.Caption = ResCBData(HS1.Value) End Sub

Private Sub VS1_Change() Dim VSL As Integer, i As Integer VSL = VS1.Value intRed = -VSL intGreen = -VSL intBlue = -VSL

Label1.Caption = CStr(-VSL) For i = 0 To 255 If intRed < 0 Then Ramp2(i, 0) = ConvToSignedValue(ConvToUnSignedValue(Ramp1(i, 0)) * (100 - Abs(intRed)) / 100) If intRed = 0 Then Ramp2(i, 0) = Ramp1(i, 0) If intRed > 0 Then Ramp2(i, 0) = ConvToSignedValue(65535 - ((65535 - ConvToUnSignedValue(Ramp1(i, 0))) * (100 - intRed) / 100))


If intGreen < 0 Then Ramp2(i, 1) = ConvToSignedValue(ConvToUnSignedValue(Ramp1(i, 1)) * (100 - Abs(intGreen)) / 100) If intGreen = 0 Then Ramp2(i, 1) = Ramp1(i, 1) If intGreen > 0 Then Ramp2(i, 1) = ConvToSignedValue(65535 - ((65535 - ConvToUnSignedValue(Ramp1(i, 1))) * (100 - intGreen) / 100))


If intBlue < 0 Then Ramp2(i, 2) = ConvToSignedValue(ConvToUnSignedValue(Ramp1(i, 2)) * (100 - Abs(intBlue)) / 100) If intBlue = 0 Then Ramp2(i, 2) = Ramp1(i, 2) If intBlue > 0 Then Ramp2(i, 2) = ConvToSignedValue(65535 - ((65535 - ConvToUnSignedValue(Ramp1(i, 2))) * (100 - intBlue) / 100)) Next i SetDeviceGammaRamp ScreenHDC, Ramp2(0, 0) End Sub Private Function ConvToSignedValue(lngValue As Long) As Integer 'This was written by the same person who did the "updateGamma" code If lngValue <= 32767 Then ConvToSignedValue = CInt(lngValue) Exit Function End If ConvToSignedValue = CInt(lngValue - 65535) End Function Private Function ConvToUnSignedValue(intValue As Integer) As Long 'This was written by the same person who did the "updateGamma" code If intValue >= 0 Then ConvToUnSignedValue = intValue Exit Function End If ConvToUnSignedValue = intValue + 65535 End Function


模組: Public Declare Function EnumDisplaySettings Lib "user32" Alias "EnumDisplaySettingsA" (ByVal lpszDeviceName As Long, ByVal iModeNum As Long, lpDevMode As Any) As Boolean Public Declare Function ChangeDisplaySettings Lib "user32" Alias "ChangeDisplaySettingsA" (lpDevMode As Any, ByVal dwFlags As Long) As Long

Public Declare Function GetDeviceGammaRamp Lib "gdi32" (ByVal hdc As Long, lpv As Any) As Long Public Declare Function SetDeviceGammaRamp Lib "gdi32" (ByVal hdc As Long, lpv As Any) As Long Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long) Public Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long Public intRed As Integer Public intGreen As Integer Public intBlue As Integer Public Const CCDEVICENAME = 32 Public Const CCFORMNAME = 32 Public Const ENUM_CURRENT_SETTINGS As Long = -1& Public Const DM_BITSPERPEL = &H40000 Public Const DM_PELSWIDTH = &H80000 Public Const DM_PELSHEIGHT = &H100000 Public Const CDS_UPDATEREGISTRY = &H1 Public Const CDS_TEST = &H4 Public Const DISP_CHANGE_SUCCESSFUL = 0 Public Const DISP_CHANGE_RESTART = 1

Public Type DEVMODE dmDeviceName As String * CCDEVICENAME 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 As String * CCFORMNAME dmUnusedPadding As Integer dmBitsPerPel As Integer dmPelsWidth As Long dmPelsHeight As Long dmDisplayFlags As Long dmDisplayFrequency As Long End Type Public Const WM_DISPLAYCHANGE = &H7E Public Const HWND_BROADCAST = &HFFFF& Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long

Public Function Int2Lng(IntVal As Integer) As Long '---------------------------------------------------------------- CopyMemory Int2Lng, IntVal, 2 '---------------------------------------------------------------- End Function Public Function Lng2Int(Value As Long) As Integer '---------------------------------------------------------------- CopyMemory Lng2Int, Value, 2 '---------------------------------------------------------------- End Function .................................................................. 透明表單


Private Declare Function GetWindowLong Lib "user32" Alias _ "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long Private Declare Function SetWindowLong Lib "user32" Alias _ "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, _ ByVal dwNewLong As Long) As Long Private Declare Function SetLayeredWindowAttributes Lib "user32" _ (ByVal hwnd As Long, ByVal crey As Byte, ByVal bAlpha As Byte, _ ByVal dwflags As Long) As Long

Private Const GWL_EXSTYLE = (-20) Private Const WS_EX_LAYERED = &H80000 Private Const WS_EX_TRANSPARENT = &H20& Private Const LWA_ALPHA = &H2&

Private Sub Form_Load()  Dim lOldStyle As Long  Dim bTrans As Byte  Me.BackColor = 0  SetWindowLong Me.hwnd, -20, GetWindowLong(Me.hwnd, -20) Or WS_EX_LAYERED  SetLayeredWindowAttributes Me.hwnd, 0, 0, 1 '第二個參數指的是顏色  bTrans = 10 '透明度 0~255之間 越小越透明  lOldStyle = GetWindowLong(Me.hwnd, GWL_EXSTYLE) End Sub

................................................................. '右下角按鈕圖案 Private Declare Function Shell_NotifyIconA Lib "SHELL32.DLL" _ (ByVal dwMessage As Long, lpData As NOTIFYICONDATA) As Long

Private Type NOTIFYICONDATA cbSize As Long hWnd As Long uID As Long uFlags As Long uCallbackMessage As Long hIcon As Long szTip As String * 64 End Type

Private Const NIM_ADD = &H0 Private Const NIM_DELETE = &H2 Private Const NIM_MODIFY = &H1 Private Const NIF_ICON = &H2 Private Const NIF_MESSAGE = &H1 Private Const NIF_TIP = &H4

Public Const WM_MOUSEMOVE = &H200 Public Const WM_LBUTTONDBLCLK = &H203 Public Const WM_LBUTTONDOWN = &H201 Public Const WM_LBUTTONUP = &H202 Public Const WM_MBUTTONDBLCLK = &H209 Public Const WM_MBUTTONDOWN = &H207 Public Const WM_MBUTTONUP = &H208 Public Const WM_RBUTTONDBLCLK = &H206 Public Const WM_RBUTTONDOWN = &H204 Public Const WM_RBUTTONUP = &H205

Private mlngID As Long Private mcolNID As Collection

'---------------------------------------------------------------------------------- Public Function AddToSystemTray(ByVal hWnd As Long, _ ByVal vlngCallbackMessage As Long, _ ByVal vipdIcon As IPictureDisp, _ ByVal vstrTip As String) As Long

mlngID = mlngID + 1

Dim nidTemp As NOTIFYICONDATA

With nidTemp .cbSize = Len(nidTemp) .hWnd = hWnd .uID = mlngID .uFlags = NIF_MESSAGE + NIF_ICON + NIF_TIP .uCallbackMessage = vlngCallbackMessage .hIcon = CLng(vipdIcon) .szTip = vstrTip & vbNullChar End With

If mcolNID Is Nothing Then Set mcolNID = New Collection

mcolNID.Add hWnd, CStr(mlngID)

Shell_NotifyIconA NIM_ADD, nidTemp

AddToSystemTray = mlngID

End Function

Public Sub ModifySystemTrayMessage(ByVal vlngID As Long, _ ByVal vlngCallbackMessage As Long)

Dim nidTemp As NOTIFYICONDATA

With nidTemp .cbSize = Len(nidTemp) .hWnd = mcolNID(CStr(vlngID)) .uID = vlngID .uFlags = NIF_MESSAGE .uCallbackMessage = vlngCallbackMessage .hIcon = 0 .szTip = vbNullChar End With

Shell_NotifyIconA NIM_MODIFY, nidTemp

End Sub

Public Sub ModifySystemTrayIcon(ByVal vlngID As Long, _ ByVal vipdIcon As IPictureDisp)

Dim nidTemp As NOTIFYICONDATA

With nidTemp .cbSize = Len(nidTemp) .hWnd = mcolNID(CStr(vlngID)) .uID = vlngID .uFlags = NIF_ICON .uCallbackMessage = 0 .hIcon = CLng(vipdIcon) .szTip = vbNullChar End With

Shell_NotifyIconA NIM_MODIFY, nidTemp

End Sub Public Sub ModifySystemTrayTip(ByVal vlngID As Long, _ ByVal vstrTip As String)

Dim nidTemp As NOTIFYICONDATA

With nidTemp .cbSize = Len(nidTemp) .hWnd = mcolNID(CStr(vlngID)) .uID = vlngID .uFlags = NIF_TIP .uCallbackMessage = 0 .hIcon = 0 .szTip = vstrTip & vbNullChar End With

Shell_NotifyIconA NIM_MODIFY, nidTemp

End Sub

Public Sub DeleteFromSystemTray(ByVal vlngID As Long)

Dim nidTemp As NOTIFYICONDATA

With nidTemp .cbSize = Len(nidTemp) .hWnd = mcolNID(CStr(vlngID)) .uID = vlngID .uFlags = NIF_MESSAGE + NIF_ICON + NIF_TIP End With

Shell_NotifyIconA NIM_DELETE, nidTemp

End Sub

表單

Dim mlngID

Private Sub Command1_Click() '顯示於右下角 If mlngID = 0 Then mlngID = AddToSystemTray(Picture1.hWnd, WM_MOUSEMOVE, Me.Icon, "顯示ToolTipText") End Sub

Private Sub Command2_Click() '關閉顯示於右下角 DeleteFromSystemTray mlngID End Sub

Private Sub Command3_Click() '可立即更動顯示訊息 ModifySystemTrayTip mlngID, "顯示ToolTipText" End Sub

Private Sub Picture1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) Dim Msg As Long If Me.ScaleMode = 1 Then Msg = X / Screen.TwipsPerPixelX Else

End If

Select Case Msg Case WM_MOUSEMOVE '移動滑鼠

Case WM_LBUTTONDBLCLK '連點滑鼠左鍵

Case WM_LBUTTONDOWN '按下滑鼠左鍵

Case WM_LBUTTONUP '放開滑鼠左鍵

Case WM_RBUTTONDBLCLK '連點滑鼠右鍵

Case WM_RBUTTONDOWN '按下滑鼠右鍵

Case WM_RBUTTONUP '放開滑鼠右鍵

End Select End Sub


'讓程式延遲 Call delay 2 '延遲兩秒

Sub delay(x)  T = Timer '作暫停  Do Until Timer - T > x    If T > Timer Then T = T - 86400    DoEvents  Loop  MsgBox "延遲了" & x & "秒" End Sub


http://tw.myblog.yahoo.com/clonin-vb/archive?l=f&id=10 http://tw.myblog.yahoo.com/clonin-vb/archive?l=f&id=6 小雄資訊網(VB研究小站):http://vb.infoserv.com.tw/

我的資訊盒子(前身 VB研究小站):http://www.myinfobox.net/ http://tw.myblog.yahoo.com/clonin-vb/article?mid=53&prev=57&next=48 http://tw.myblog.yahoo.com/clonin-vb/archive?l=f&id=6 http://www2.kuas.edu.tw/prof/hsuqc/3/premea/3/web/6.htm http://blog.udn.com/JovanyS/1524124 http://msdn.microsoft.com/zh-tw/library/ms160695.aspx http://jaric.myweb.hinet.net/vb/vb/simple/vbSimple13.htm http://www.eyny.com/archiver/tid-1217667.html http://social.msdn.microsoft.com/Forums/zh-TW/232/thread/edd0f561-5a58-4c58-906e-1b81534d1f0d/ http://www.decompiler-vb.net/ http://bbs.hk-db.com/archiver/?tid-481.html