??
字號:
Dim mhAniCursor As Long
將如下的代碼添加到Form1的Form_Load事件中:
Private Sub Form_Load()
Dim lResult As Long
mhBaseCursor = GetClassLong((Me.hwnd), GCL_HCURSOR)
End Sub
將如下的代碼添加到Command1的單擊事件中:
Private Sub Command1_Click()
Dim lResult As Long
Dim RT_FormArea As RECT
mhAniCursor = LoadCursorFromFile("c:\win95\cursors\appstart.ani")
lResult = SetClassLong((Me.hwnd), GCL_HCURSOR, mhAniCursor)
lResult = GetWindowRect((Me.hwnd), RT_FormArea)
lResult = ClipCursor(RT_FormArea)
End Sub
將如下的代碼添加到Command2的單擊事件中:
Private Sub Command2_Click()
Dim lResult As Long
Dim RT_ScreenArea As RECT
RT_ScreenArea.Top = 0
RT_ScreenArea.Left = 0
RT_ScreenArea.Bottom = Screen.Height \ Screen.TwipsPerPixelX
RT_ScreenArea.Right = Screen.Width \ Screen.TwipsPerPixelY
lResult = ClipCursor(RT_ScreenArea)
lResult = SetClassLong((Me.hwnd), GCL_HCURSOR, mhBaseCursor)
lResult = DestroyCursor(mhAniCursor)
End Sub
通過按下F5鍵來運行該程序,單擊“顯示動畫光標”命令按鈕,則在窗體的范圍內光標變成為APPSTART.ANI光標,并且光標被限制在窗體的范圍內。單擊“恢復缺省光標”命令按鈕,則窗體中的光標被恢復為缺省的光標。注意,在退出該樣例程序之前,需要單擊“恢復缺省光標”命令按鈕,否則將不能在系統中正確進行其它操作。
播放聲音文件 [返回]
在 某 些 情 況 下, 例 如 程 序 員 正 在 編 寫 一 個 游 戲, 或 是 將 要 進 行 一 項 非 常 冗 長 無 聊 的 過 程, 可 以 通 過 播 放 音 樂 來 增 加 游 戲 的 聲 光 效 果 或 是 減 少 漫 長 的 等 待 所 帶 來 的 困 倦。 本 文 介 紹 如 何 在Microsoft Visual Basic 中 對 聲 音 文 件 進 行 播 放。
播 放 聲 音 文 件
在Microsoft Visual Basic 中 進 行 多 媒 體 音 樂 的 播 放 是 一 件 非 常 輕 松 的 事 情。 在Microsoft Windows 系 統 中 支 持 的 聲 音 文 件 有WAV 文 件 和MIDI 文 件, 通 常 使 用Windows 應 用 程 序 編 程 接 口(API) 函 數mciExecute 函 數 可 以 對MIDI 文 件 進 行 播 放。 而 使 用API 函 數sndPlaySound 則 可 以 對WAV 播 放 文 件 進 行 播 放, 當 然, 你 也 可 以 使 用mciExecute 函 數 來 播 放WAV 文 件。
為 了 播 放WAV 文 件, 你 需 要 在 你 的 程 序 窗 體 的 通 用 聲 明 部 分 中, 或 是 標 準 模 塊 中 添 加 如 下 的 聲 明 語 句:
Private Declare Function sndPlaySound Lib "winmm.dll" Alias "sndPlaySoundA" (ByVal lpszSoundName As String, ByVal uFlags As Long) As Long
以 及 如 下 的 標 識 常 量:
Public Const SND_SYNC = &H0
Public Const SND_ASYNC = &H1
Public Const SND_NODEFAULT = &H2
Public Const SND_MEMORY = &H4
Public Const SND_ALIAS = &H10000
Public Const SND_FILENAME = &H20000
Public Const SND_RESOURCE = &H40004
Public Const SND_ALIAS_ID = &H110000
Public Const SND_ALIAS_START = 0
Public Const SND_LOOP = &H8
Public Const SND_NOSTOP = &H10
Public Const SND_VALID = &H1F
Public Const SND_NOWAIT = &H2000
Public Const SND_VALIDFLAGS = &H17201F
Public Const SND_RESERVED = &HFF000000
Public Const SND_TYPE_MASK = &H170007
sndPlaySound 函 數 需 要 兩 個 參 數, 第 一 個 參 數soundfilename 是 要 播 放 的WAV 文 件 的 名 稱。 第 二 個 參 數 是 一 個 表 明 播 放 方 式 的 標 識 常 量, 其 定 義 的 值 如 上 所 示, 通 常 所 使 用 的 標 識 意 義 如 下:
SND_SYNC 播 放WAV 文 件, 播 放 完 畢 后 將 控 制 轉 移 回 你 的 應 用 程 序 中。
SND_ASYNC 播 放WAV 文 件, 然 后 將 控 制 立 即 轉 移 回 你 的 應 用 程 序 中, 而 不 管 對WAV 文 件 的 播 放 是 否 結 束。
SND_NODEFAULT 不 要 播 放 缺 省 的WAV 文 件, 以 免 發 生 某 些 意 外 的 錯 誤。
SND_MEMORY 播 放 以 前 已 經 加 載 到 內 存 中 的WAV 文 件。
SND_LOOP 循 環 播 放WAV 文 件。
SND_NOSTOP 在 開 始 播 放 其 它 的WAV 文 件 之 前, 需 要 完 成 對 本WAV 文 件 的 播 放。
注 意:SND_LOOP 標 識 通 常 需 要 同SND_ASYNC 共 同 使 用, 也 即 在 兩 個 標 識 之 間 添 加 與 播 放 符, 以 免 在 對WAV 文 件 進 行 播 放 的 時 候 將 系 統 掛 起。
為 了 播 放MIDI 文 件, 你 需 要 在 你 的 程 序 窗 體 的 通 用 聲 明 部 分 中, 或 是 標 準 模 塊 中 添 加 如 下 的 聲 明 語 句:
Private Declare Function mciExecute Lib "winmm.dll" Alias "mciExecute" (ByVal lpstrCommand As String) As Long
mciExecute 函 數 只 需 要 一 個 參 數,CommandString, 顧 名 思 義, 它 是 一 個 命 令 字 符 串, 用 于 表 明 對 聲 音 文 件 播 放 的 命 令, 例 如, 希 望 完 整 播 放 聲 音 文 件, 則 該 字 符 串 就 是 字 符 串損lay" 加 上 聲 音 文 件 的 路 徑 以 及 文 件 名 稱, 如 下 所 示**
Dim ReturnValue As Long
ReturnSoundValue = mciExecute("play C:\WIN95\MEDIA\CANYON.MID")
如 果 希 望 對 聲 音 文 件 的 部 分 進 行 播 放, 可 以 使 用from...to... 語 句 格 式, 例 如 若 要 播 放CANYON.MID 文 件 的10 毫 秒 到100 毫 秒 的 部 分, 可 以 使 用 如 下 的 語 句:
Dim ReturnValue As Long
ReturnSoundValue = mciExecute("play C:\WIN95\MEDIA\CANYON.MID from 10 to 100")
mciExecute 函 數 也 可 以 用 來 對WAV 文 件 進 行 播 放, 方 法 同 播 放MIDI 一 樣。
樣 例 程 序
1. 在Visual Basic 中 開 始 一 個 新 的 項 目, 采 用 缺 省 的 方 法 建 立Form1。
2. 將 如 下 的 聲 明 語 句 添 加 到Form1 的 通 常 聲 明 部 分 中( 注 意 每 個 聲 明 語 句 需 要 被 書 寫 在 一 行 內):
Private Declare Function sndPlaySound Lib "winmm.dll" Alias "sndPlaySoundA" (ByVal lpszSoundName As String, ByVal uFlags As Long) As Long
Const SND_SYNC = &H0
Const SND_ASYNC = &H1
Const SND_NODEFAULT = &H2
Const SND_MEMORY = &H4
Const SND_ALIAS = &H10000
Const SND_FILENAME = &H20000
Const SND_RESOURCE = &H40004
Const SND_ALIAS_ID = &H110000
Const SND_ALIAS_START = 0
Const SND_LOOP = &H8
Const SND_NOSTOP = &H10
Const SND_VALID = &H1F
Const SND_NOWAIT = &H2000
Const SND_VALIDFLAGS = &H17201F
Const SND_RESERVED = &HFF000000
Const SND_TYPE_MASK = &H170007
Private Declare Function mciExecute Lib "winmm.dll" Alias "mciExecute" (ByVal lpstrCommand As String) As Long
3. 在Form1 上 添 加 一 個 文 本 框 控 件, 采 用 缺 省 的 方 法 建 立Text1。 將 它 的Caption 屬 性 設 置 為NULL。
4. 在Form1 上 添 加 一 個 命 令 按 鈕 控 件, 采 用 缺 省 的 方 法 建 立Command1。 將 它 的Caption 屬 性 設 置 為" 使 用sndPlaySound 函 數敗*
5. 在Form1 上 添 加 一 個 命 令 按 鈕 控 件, 采 用 缺 省 的 方 法 建 立Command2。 將 它 的Caption 屬 性 設 置 為" 使 用mciExecute 函 數敗*
6. 將 如 下 的 代 碼 添 加 到Command1 的 單 擊 事 件 中:
Private Sub Command1_Click()
Dim ReturnValue As Long
Text1.Text = " 使 用sndPlaySound 函 數 播 放TADA.WAV 文 件。"
ReturnValue = sndPlaySound("C:\WIN95\MEDIA\TADA.WAV", SND_SYNC)
End Sub
7. 將 如 下 的 代 碼 添 加 到Command2 的 單 擊 事 件 中:
Private Sub Command2_Click()
Dim ReturnValue As Long
Text1.Text = " 使 用mciExecute 函 數 播 放Canyon.mid 文 件。"
ReturnSoundValue = mciExecute
("play C:\WIN95\MEDIA\CANYON.MID from 10 to 100")
End Sub
通 過 按 下F5 鍵 來 執 行 樣 例 程 序。 單 擊" 使 用sndPlaySound 函 數" 命 令 按 鈕 則 使 用sndPlaySound 函 數 來 播 放C:\WIN95\MEDIA 目 錄 下 面 的TADA.WAV 聲 音 文 件, 如 圖1。 單 擊" 使 用mciExecute 函 數" 則 使 用mciExecute 函 數 來 播 放C:\WIN95\MEDIA 目 錄 下 面 的CANYON.MID 文 件 的10 毫 秒 到100 毫 秒 的 部 分。
防止用戶編輯文本框控件中的內容 [返回]
Visual Basic 中 的 文 本 框 控 件 允 許 用 戶 在 其 中 鍵 入 文 本, 以 便 在 程 序 中 使 用。 相 反, 程 序 員 可 能 會 希 望 顯 示 一 些 文 本 但 不 希 望 用 戶 編 輯 該 文 本。 本 文 介 紹 了 如 何 創 建 只 讀 的 文 本 框 控 件 的 內 容。
使 一 個 文 本 框 控 件 只 讀
在Visual Basic 中, 如 果 文 本 框 控 件 的MultiLine 屬 性 設 置 為True, 文 本 將 會 自 動 地 換 行 到 下 一 行。 另 外, 如 果 文 本 框 控 件 的ScrollBars 屬 性 設 置 為3-Both( 或 者1-Vertical, 或 者2-Horizontal), 用 戶 還 能 夠 滾 動 控 件 中 的 內 容。
程 序 員 要 想 實 現 文 本 框 控 件 中 的 文 本 不 可 編 輯, 可 將 文 本 框 控 件 中 的 內 容 設 置 為 只 讀 狀 態, 這 可 以 通 過 使 用Microsoft Windows 應 用 程 序 編 程 接 口(API) 的SendMessage 函 數 來 實 現。 SendMessage 函 數 可 以 用 來 發 送 一 個EM_SETREADONLY 消 息 到 文 本 框 控 件 中, 這 將 使 文 本 框 控 件 變 為 只 讀。
要 在 程 序 中 使 用 該SendMessage 函 數, 需 要 將 如 下 的 聲 明 語 句 包 含 在 項 目 的 通 用 聲 明 部 分 中( 注 意 該 聲 明 語 句 需 要 書 寫 在 一 行 內):
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Integer, ByVal lParam As Long) As Long
該SendMessage 函 數 需 要4 個 參 數, 如 下 所 示:
.hwnd 一 個 長 整 數 值, 它 包 含 文 本 框 控 件 的 句 柄。
.wMsg 一 個 長 整 數 值, 它 包 含 被 發 送 的 消 息, 在 這 個 例 子 里, 是EM_SETREADONLY。
.wParam 一 個 整 數 值, 如 果 它 為True, 則 控 件 被 設 置 只 讀 標 記, 如 果 它 為False, 則 刪 除 控 件 的 只 讀 標 記。
.lParam 一 個 長 整 數 值, 它 應 該 被 設 置 為0(EM_SETREADONLY 不 使 用 它)。
在 程 序 運 行 了 此SendMessage 函 數 之 后, 將 返 回 一 個 長 整 數 值, 指 明 調 用 成 功( 返 回 值 非0) 或 是 失 敗( 返 回 值 為0)。
樣 例 程 序
該 程 序 顯 示 了 如 何 防 止 用 戶 編 輯 一 個 文 本 框 控 件 中 的 內 容。
1. 在Visual Basic 中 開 始 一 個 新 的 工 程, 采 用 缺 省 的 方 法 建 立Form1。
2. 將 如 下 的 常 量 和 聲 明 語 句 添 加 到Form1 的 通 用 聲 明 部 分 中( 注 意 該 聲 明 語 句 需 要 書 寫 在 一 行 內):
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Integer, ByVal lParam As Long) As Long
Const WM_USER = &H400
Const EM_SETREADONLY = (WM_USER + 31)
4. 在Form1 上 添 加 一 個 文 本 框 控 件, 采 用 缺 省 的 方 法 建 立Text1。 將 其MultiLine 屬 性 設 置 為True, 并 且 將 它 的ScrollBars 屬 性 設 置 為3-Both。
5. 在Form1 上 添 加 一 個 命 令 按 鈕 控 件, 采 用 缺 省 的 方 法 建 立Command1。
6. 將 如 下 的 代 碼 添 加 到Command1 的 單 擊 事 件 中:
Private Sub Command1_Click()
Dim RetVal As Long
RetVal = SendMessage(Text1.hwnd, EM_SETREADONLY, True, ByVal 0&)
End Sub
通 過 按 下F5 鍵 來 執 行 樣 例 程 序。在 文 本 框 控 件 中 鍵 入 一 些 文 本, 可 以 使 用 水 平 和 垂 直 滾 動 條 來 滾 動 文 本, 還 可 以 改 變 文 本 的 內 容。單 擊 命 令 按 鈕, 用 戶 仍 然 可 以 使 用 滾 動 條 或 是 光 標 鍵 來 查 看 文 本 框 控 件 的 內 容, 但 是 不 能 編 輯 它。
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -