Visual Basic中的界面設(shè)計(jì)原則與編程技巧
發(fā)表時(shí)間:2023-08-05 來(lái)源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]在VB 里 ,MDI(Multiple Document Interface , 多 窗 口 程 序) 窗 體 是 這 樣 定 義 的:“MDI 窗 體 作 為 一 個(gè) 程 序 的 后 臺(tái) 窗 口 ...
在VB 里 ,MDI(Multiple Document Interface , 多 窗 口 程 序) 窗 體 是 這 樣 定 義 的:“MDI 窗 體 作 為 一 個(gè) 程 序 的 后 臺(tái) 窗 口 , 包 含 著MDIChild 屬 性 為T(mén)rue 的 窗 體” 。 在 一 個(gè)VB 程 序 中 , 至 多 只 能 存 在 一 個(gè)MDI 父 窗 體 , 可 以 有 多 個(gè)MDI 子 窗 體; 建 立 一 個(gè)MDI 父 窗 體 的 方 法 是 在VB 的File 菜 單 里 選 擇“New MDI Form” 。
在MDI 程 序 運(yùn) 行 時(shí) , 如 果 子 窗 口 具 有 菜 單 , 那 么 當(dāng) 子 窗 口 被 激 活 時(shí) , 子 窗 口 的 菜 單 就 會(huì) 自 動(dòng) 替 換 父 窗 口 菜 單; 當(dāng) 子 窗 口 被 最 小 化 時(shí) , 在MDI 父 窗 口 里 就 會(huì) 出 現(xiàn) 子 窗 口 的 圖 標(biāo) 。
Windows 的 通 用 圖 形 界 面 的 出 現(xiàn) , 使 計(jì) 算 機(jī) 用 戶(hù) 不 必 通 過(guò) 專(zhuān) 門(mén) 的 學(xué) 習(xí) 就 可 以 得 心 應(yīng) 手 地 使 用 各 種Windows 的 軟 件; 不 僅 如 此 , 它 還 是 程 序 設(shè) 計(jì) 者 在 設(shè) 計(jì)Windows 程 序 的 界 面 時(shí) 所 必 須 遵 循 的 標(biāo) 準(zhǔn) , 這 在 很 大 程 度 上 減 輕 了 程 序 設(shè) 計(jì) 者 的 負(fù) 擔(dān) , 使 他 們 能 夠 把 主 要 精 力 放 在 問(wèn) 題 的 求 解 和 實(shí) 現(xiàn) 上 。
Visual Basic 的 出 現(xiàn) , 更 加 簡(jiǎn) 化 了Windows 程 序 界 面 的 設(shè) 計(jì) 工 作 , 只 需 要 極 少 量 的 代 碼 , 就 能 實(shí) 現(xiàn) 標(biāo) 準(zhǔn)Windows 應(yīng) 用 程 序 的 界 面 。 但 是 , 如 果 不 了 解Windows 程 序 界 面 設(shè) 計(jì) 的 原 則 , 或 者 不 熟 悉VB 下 界 面 編 程 的 技 巧 , 就 難 以 設(shè) 計(jì) 和 實(shí) 現(xiàn) 既 符 合 一 般 標(biāo) 準(zhǔn) 又 具 有 特 色 的 界 面 。 界 面 設(shè) 計(jì) 的 原 則 界 面 設(shè) 計(jì) 具 有 一 般 性 的 原 則 , 最 為 重 要 的 有:
界 面 要 具 有 一 致 性 。 一 致 性 原 則 在 界 面 設(shè) 計(jì) 中 最 容 易 被 違 反 , 同 時(shí) 也 最 容 易 修 改 和 避 免 。 例 如 , 在 菜 單 和 聯(lián) 機(jī) 幫 助 中 必 須 使 用 相 同 的 術(shù) 語(yǔ); 對(duì) 話(huà) 框 必 須 具 有 相 同 的 風(fēng) 格 。
常 用 操 作 要 有 捷 徑 。 常 用 操 作 的 使 用 頻 度 大 , 應(yīng) 該 減 少 操 作 序 列 的 長(zhǎng) 度 。 例 如 , 為 文 件 的 常 用 操 作 如 打 開(kāi) 、 存 盤(pán) 、 另 存 等 設(shè) 置 快 捷 鍵 。 使 常 用 操 作 具 有 捷 徑 , 不 僅 會(huì) 提 高 用 戶(hù) 的 工 作 效 率 , 還 使 得 界 面 在 功 能 實(shí) 現(xiàn) 上 簡(jiǎn) 潔 和 高 效 。
提 供 簡(jiǎn) 單 的 錯(cuò) 誤 處 理 。 系 統(tǒng) 要 有 錯(cuò) 誤 處 理 的 功 能 。 在 出 現(xiàn) 錯(cuò) 誤 時(shí) , 系 統(tǒng) 應(yīng) 該 能 檢 測(cè) 出 錯(cuò) 誤 , 并 且 提 供 簡(jiǎn) 單 和 容 易 理 解 的 錯(cuò) 誤 處 理 的 功 能 。 錯(cuò) 誤 出 現(xiàn) 后 系 統(tǒng) 的 狀 態(tài) 不 發(fā) 生 變 化 , 或 者 系 統(tǒng) 要 提 供 錯(cuò) 誤 恢 復(fù) 的 指 導(dǎo) 。
提 供 信 息 反 饋 。 對(duì) 操 作 人 員 的 重 要 操 作 要 有 信 息 反 饋 。 對(duì) 常 用 操 作 和 簡(jiǎn) 單 操 作 的 反 饋 可 以 不 作 要 求 , 但 是 對(duì) 不 常 用 操 作 和 至 關(guān) 重 要 的 操 作 , 系 統(tǒng) 應(yīng) 該 提 供 信 息 的 反 饋 。
操 作 可 逆 。 操 作 應(yīng) 該 可 逆 。 這 對(duì) 于 不 具 備 專(zhuān) 門(mén) 的 知 識(shí) 的 操 作 人 員 相 當(dāng) 有 用 。 可 逆 的 動(dòng) 作 可 以 是 單 個(gè) 的 操 作 , 或 是 者 一 個(gè) 相 對(duì) 獨(dú) 立 的 操 作 序 列 。
設(shè) 計(jì) 良 好 的 聯(lián) 機(jī) 幫 助 。 雖 然 對(duì) 于 熟 練 用 戶(hù) 來(lái) 說(shuō) , 聯(lián) 機(jī) 幫 助 并 非 必 不 可 少 , 但 是 對(duì) 于 大 多 數(shù) 不 熟 練 用 戶(hù) 來(lái) 說(shuō) , 聯(lián) 機(jī) 幫 助 具 有 非 常 重 要 的 作 用 。
菜 單 設(shè) 計(jì) 的 原 則 和 編 程
菜 單 設(shè) 計(jì) 有 如 下 的 一 般 性 原 則:
按 照 系 統(tǒng) 的 功 能 來(lái) 組 織 菜 單 。
要 選 用 廣 而 淺 的 菜 單 樹(shù) , 而 不 是 窄 而 深 的 菜 單 樹(shù) 。
根 據(jù) 菜 單 選 項(xiàng) 的 含 義 進(jìn) 行 分 組; 并 且 按 一 定 的 規(guī) 則 排 序 。 菜 單 選 項(xiàng) 的 標(biāo) 題 要 力 求 簡(jiǎn) 短 、 含 義 明 確 , 并 且 最 好 以 關(guān) 鍵 詞 開(kāi) 始 。
常 用 選 項(xiàng) 要 設(shè) 置 快 捷 鍵 。 結(jié) 合 以 上 的 原 則 , 菜 單 編 程 有 以 下 幾 方 面 的 技 術(shù) 和 技 巧:
菜 單 選 項(xiàng) 的 分 組
在VB 中 , 菜 單 選 項(xiàng) 的 分 組 是 通 過(guò) 菜 單 欄 分 隔 橫 線(xiàn) 實(shí) 現(xiàn) 的 。 在 菜 單 的 一 定 位 置 增 加 一 個(gè)Caption 屬 性 為“ ” 的 菜 單 項(xiàng) , 它 在 菜 單 上 就 表 現(xiàn) 為 一 條 橫 線(xiàn) 。 在 許 多 情 況 下 , 同 一 個(gè) 功 能 菜 單 下 又 可 以 按 照 菜 單 選 項(xiàng) 的 功 能 分 為 幾 組 , 這 時(shí) 就 可 以 用 分 隔 橫 線(xiàn) 來(lái) 實(shí) 現(xiàn) 菜 單 項(xiàng) 的 分 組 。
常 用 選 項(xiàng) 快 捷 鍵 的 設(shè) 置
打 開(kāi) 菜 單 設(shè) 計(jì) 窗 口(Menu Design Window) , 應(yīng) 對(duì) 于 每 個(gè) 菜 單 選 項(xiàng) 有 相 應(yīng) 的 快 捷 鍵(Shortcut) 列 表 , 在 該 表 中 選 擇 一 個(gè) 即 可 。 需 要 注 意 的 是 , 具 有 子 菜 單 的 菜 單 或 者 頂 層 菜 單 的 快 捷 鍵 不 能 這 樣 定 義 。 按 照Windows 的 界 面 設(shè) 計(jì) 原 則 , 頂 層 菜 單 的 快 捷 鍵 的 形 式 是Alt+ 字 母 鍵 。 它 的 實(shí) 現(xiàn) 方 法 在 后 文 另 敘 。
對(duì) 于 一 些 常 用 的 功 能 菜 單 項(xiàng) , 有 約 定 俗 成 的 快 捷 鍵 。 例 如 , 文 件 打 開(kāi) 用CTRL+O , 文 件 存 盤(pán) 用CRTL+S , 打 印 用CTRL+P , 等 等 。
為 菜 單 選 項(xiàng) 定 義 好 快 捷 鍵 之 后 , 菜 單 上 該 選 項(xiàng) 的 后 面 就 出 現(xiàn) 了 快 捷 鍵 的 文 字 表 示 。
菜 單 選 項(xiàng) 的 使 能 與 禁 止 、 可 見(jiàn) 與 隱 藏 為 了 表 示 菜 單 選 項(xiàng) 的 一 些 特 殊 功 能 , 可 能 要 用 到 菜 單 選 項(xiàng) 的 使 能 與 禁 止 、 可 見(jiàn) 與 隱 藏 屬 性 。 當(dāng) 因 為 某 種 原 因 使 得 某 個(gè) 選 項(xiàng) 所 代 表 的 功 能 不 能 被 實(shí) 現(xiàn) 時(shí) , 就 應(yīng) 該 禁 止 該 選 項(xiàng) 被 選 中 。 菜 單 選 項(xiàng) 的 使 能 與 禁 止 是 通 過(guò) 改 變 改 選 項(xiàng) 的Enabled 屬 性 實(shí) 現(xiàn) 的 。 舉 例 來(lái) 說(shuō) , 假 設(shè) 菜 單 選 項(xiàng) 名 為nmuName , 則 禁 止 該 選 項(xiàng) 可 以 如 下 實(shí) 現(xiàn):
mnuName.Enabled=False
同 理 , 隱 藏 一 個(gè) 選 項(xiàng) 可 以 用
mnuName.Visible=False
來(lái) 實(shí) 現(xiàn) , 而 使 一 個(gè) 隱 藏 的 選 項(xiàng) 恢 復(fù) 可 見(jiàn) 則 用
mnuName.Visible=True
實(shí) 現(xiàn) 。
菜 單 項(xiàng) 的 隱 藏 與 恢 復(fù) 可 見(jiàn) 常 常 用 在 動(dòng) 態(tài) 菜 單 的 實(shí) 現(xiàn) 中 。
菜 單 項(xiàng) 的 動(dòng) 態(tài) 裝 入
菜 單 項(xiàng) 的 動(dòng) 態(tài) 裝 入 是 指 菜 單 項(xiàng) 的 個(gè) 數(shù) 不 固 定 , 并 且 能 夠 在 需 要 時(shí) 動(dòng) 態(tài) 地 裝 入 。 最 簡(jiǎn) 單 的 例 子 就 是 文 件 菜 單 中 最 近 打 開(kāi) 的 文 件 的 列 表 。 在 第 一 次 打 開(kāi) 文 件 之 前 , 該 列 表 是 空 的 , 并 且 不 在 文 件 菜 單 中 出 現(xiàn); 打 開(kāi) 一 個(gè) 文 件 后 , 該 列 表 不 再 是 空 的 , 并 且 文 件 菜 單 中 出 現(xiàn) 代 表 被 打 開(kāi) 文 件 的 菜 單 項(xiàng) 。
在 上 面 的 例 子 里 , 就 綜 合 運(yùn) 用 了 菜 單 項(xiàng) 的 下 標(biāo) 屬 性(Index) 、 標(biāo) 題 屬 性(Caption) 、 可 見(jiàn) 屬 性 (Visible) 以 及 菜 單 項(xiàng) 的 裝 入 方 法(Load Method) 。
具 體 的 實(shí) 現(xiàn) 過(guò) 程 如 下:
在 文 件 菜 單 里 增 加 一 個(gè) 菜 單 項(xiàng) , 標(biāo) 題 任 意 , 并 假 設(shè) 菜 單 項(xiàng) 的Name 屬 性 是opened_files_list;
更 改 菜 單 項(xiàng)opened_files_list 的 可 見(jiàn) 屬 性 , 使 opened_files_list.Visible=False
更 改 菜 單 項(xiàng)opened_files_list 的 下 標(biāo) 屬 性 , 使
opened_files_files_list.Index=0
在 程 序 中 控 制 菜 單 項(xiàng)opened_files_list 的 動(dòng) 態(tài) 裝 入 。
假 設(shè) 要 顯 示 打 開(kāi) 過(guò) 的 第 二 文 件 的 文 件 名 , 并 且 該 文 件 名 存 放 在 一 個(gè) 文 件 名 數(shù) 組opened_file_ name 里 。 以 下 的 代 碼 就 實(shí) 現(xiàn) 了 這 一 功 能:
Load opened_files_list(1)
opened_files_lise(1).Caption="&2"+opened_file_name(1)
opened_files_list(1).Visible=True
需 要 注 意 的 是 , 對(duì) 于 下 標(biāo) 為0 的 菜 單 項(xiàng) , 不 能 用Load 方 法 。 因 為 在 程 序 執(zhí) 行 時(shí) , 該 菜 單 項(xiàng) 就 已 經(jīng) 被 裝 入 到 內(nèi) 存 里 了; 另 外 , 在 菜 單 項(xiàng) 的 標(biāo) 題 屬 性 字 符 里 的“&” 字 符 具 有 特 殊 的 含 義 , 它 的 作 用 是 在 顯 示 該 屬 性 字 符 串 的 同 時(shí) , 并 不 顯 示“&” 本 身 , 而 緊 跟“&” 的 字 符 在 顯 示 時(shí) 具 有 下 劃 線(xiàn) , 并 且 該 字 符 成 為 熱 鍵 。
如 果 下 標(biāo) 不 為0 的 菜 單 項(xiàng) 不 再 需 要 , 為 了 減 少 對(duì) 內(nèi) 存 資 源 的 占 用 , 可 以 用Unload 方 法 把 它 從 內(nèi) 存 卸 出; 同 樣 地 , 不 能 用Unload 卸 出 下 標(biāo) 為0 的 菜 單 項(xiàng) 。
彈 出 式 菜 單 的 實(shí) 現(xiàn)(PopupMenu Method)
VB 中 在 菜 單 設(shè) 計(jì) 窗 口(Menu Design Window) 中 設(shè) 計(jì) 的 菜 單 是 下 拉 式 菜 單 。 下 拉 式 菜 單 是 用 戶(hù) 在 任 何 時(shí) 候 都 可 以 在 頂 端 菜 單 條 上 選 擇 后 拉 出 的 菜 單 , 而 彈 出 式 菜 單 則 是 在 程 序 界 面 的 一 定 區(qū) 域 內(nèi) 點(diǎn) 按 鼠 標(biāo) 鍵 后 出 現(xiàn) 的 菜 單 。 在 某 些 情 況 下 , 彈 出 式 菜 單 會(huì) 使 系 統(tǒng) 功 能 的 實(shí) 現(xiàn) 更 加 簡(jiǎn) 潔 和 高 效 , 使 用 起 來(lái) 更 加 得 心 應(yīng) 手 。
Widnows 程 序 的 彈 出 式 菜 單 一 般 是 當(dāng) 用 戶(hù) 在 程 序 的 桌 面 上 點(diǎn) 按 鼠 標(biāo) 鍵 時(shí) 出 現(xiàn) 的 。 彈 出 式 菜 單 多 用 于 實(shí) 現(xiàn) 系 統(tǒng) 的 附 加 或 增 強(qiáng) 功 能 。 彈 出 式 菜 單 的 內(nèi) 容 , 可 以 隨 點(diǎn) 按 鼠 標(biāo) 鍵 的 位 置 不 同 而 變 化 。 由 于 彈 出 的 菜 單 要 覆 蓋 屏 幕 的 一 部 分 , 所 以 應(yīng) 盡 量 縮 短 菜 單 里 的 文 字 。
在VB 中 , 彈 出 式 菜 單 的 實(shí) 現(xiàn) 要 用 到 下 拉 式 菜 單 設(shè) 計(jì) 的 技 術(shù) 和PopupMenu 方 法 。 具 體 的 做 法 是:
在 菜 單 設(shè) 計(jì) 窗 口(Menu Design Window) 里 設(shè) 計(jì) 好 相 應(yīng) 窗 體 的 彈 出 式 菜 單 。 要 注 意 的 是 , 要 彈 出 的 菜 單 必 須 至 少 有 一 個(gè) 子 菜 單; 因 而 這 個(gè) 菜 單 不 能 有 快 捷 鍵 , 并 且Checked 屬 性 必 須 是False 。 再 把 彈 出 式 菜 單 的Visible 屬 性 改 為False 。
在 具 有 設(shè) 計(jì) 好 的 彈 出 式 菜 單 的 窗 體 的Form_Click 中 加 入 以 下 代 碼( 假 設(shè) 彈 出 式 菜 單 的Name 屬 性 是mnuExample):
Sub Form_Click()
PopupMenu mnuExample
End Sub
如 果 要 求 只 有 按 下 鼠 標(biāo) 左 鍵 或 者 右 鍵 才 能 激 活 菜 單 , 就 必 須 在Form_MouseDown 里 加 入 如 下 代 碼:
Sub Form_MouseDown(Button As Integer,Shift As Integer,x As Single,y As Single)
If Button=2 then Button=2 表 示 鼠 標(biāo) 右 鍵
PopupMenu mnuExample
End If
PopupMenu 的 完 整 句 法 是:
[Form.]PopupMenu menuname[flags[,x[,y]]]
改 變flags 的 值 可 以 控 制 彈 出 式 菜 單 的 表 現(xiàn) 形 式 。flags 有 兩 組 值 。 第 一 組 值 用 來(lái) 控 制 菜 單 的 顯 示 方 式 , 包 括POPUPMENU_LEFTALIGNPOPUPMENU_CENTERALIGN,POPUPMENU_RIGHTALIGN , 分 別 表 示 以x 為 左 邊 界 , 以x 為 中 心 和 以x 為 右 邊 界 的 顯 示 方 式 , 并 且 以x 為 左 邊 界 是 缺 省 的 方 式; 另 外 一 組 值 用 來(lái) 控 制 菜 單 項(xiàng) 的 選 中 方 式 , 包 括POPUPMENU_LEFTBUTTON 和POPUPMENU_RIGHTBUTTON , 分 別 表 示 左 鍵 選 中 和 左/ 右 鍵 選 中 均 可 , 并 且 左 鍵 選 中 是 缺 省 的 方 式 。flags 的 值 由 上 面 的 兩 組 值 經(jīng) 過(guò)OR 運(yùn) 算 得 出 。 例 如 , 要 求 左 對(duì) 齊 顯 示 并 且 左 鍵 選 中 為 準(zhǔn) , 則 應(yīng) 有:
flags=POPUPMENU_LEFTALIGN OR POPUPMENU_LEFTBUTTON
x 和y 用 來(lái) 定 義 菜 單 彈 出 的 位 置 、 缺 省 是 鼠 標(biāo) 點(diǎn) 中 的 位 置 。
菜 單 項(xiàng) 的 其 他 屬 性
用ALT+ 字 母 鍵 激 活 頂 層 菜 單 , 或 者 在 菜 單 激 活 后 用 字 母 鍵 激 活 一 個(gè) 菜 單 項(xiàng) , 必 須 學(xué) 會(huì) 使 用& 。& 用 在 菜 單 項(xiàng) 的 標(biāo) 題 屬 性(Caption) 里 。 它 的 用 法 和 作 用 與 在 用C 語(yǔ) 言 編 制 的Windows 程 序 中 的 用 法 和 作 用 相 同 。
有 時(shí) 希 望 頂 層 菜 單 之 間 的 間 隔 大 一 些 , 或 者 某 個(gè) 頂 層 菜 單 出 現(xiàn) 在 菜 單 條 的 最 右 端 , 這 時(shí) 就 要 用 到 標(biāo) 題 屬 性 是 空 格 的 菜 單 。 如 果 一 個(gè) 菜 單 的 標(biāo) 題 是 由 多 個(gè) 空 格 組 成 的 , 那 么 這 個(gè) 菜 單 在 菜 單 條 上 就 占 用 跟 空 格 的 個(gè) 數(shù) 相 應(yīng) 的 空 間 , 并 且 它 后 面 的 菜 單 也 順 序 地 后 移; 如 果 這 個(gè) 菜 單 的Visible 屬 性 是False , 那 么 它 就 跟 不 存 在 一 樣 。
窗 口 設(shè) 計(jì) 的 原 則 和 舉 例
下 面 是 一 個(gè) 浮 動(dòng) 窗 口 技 術(shù) 的 例 子 。 為 了 引 起 用 戶(hù) 的 注 意 , 或 者 必 須 保 證 含 有 重 要 信 息 的 窗 口 不 被 其 他 窗 口 覆 蓋 , 就 要 用 到 浮 動(dòng) 窗 口 技 術(shù) , 建 立 一 個(gè)“ 總 在 最 前 面”(TopMost) 的 窗 口 。 具 體 的 做 法 是:
(1) 在VB 程 序 中 加 入 如 下 的 聲 明:
Declare Function SetWindowPos Lib"user"(Byval h%,Byval hb%,Byval x%,Byval y%,By
val cx%,Byval cy%,Byval f%)As Integer
Global Const SWP_NOMOVE=2
Global Const SWP_NOSIZE=1
Global Const HWND_TOPMOST= 1
Global Const HWND_NOTOPMOST= 2
Global Const FLAGS=SWP_NOMOVE Or SWP_NOSIZE
(2) 假 設(shè) 要 把 窗 體frmExample 設(shè) 置 成 總 在 最 前 面 的 窗 口 , 只 要 在frmExample 窗 體 的Form_Load
過(guò) 程 里 加 入 以 下 代 碼:
Dim success%
success=SetWindowPos(frmExample.hWnd,HWND_TOPMOST,0,0,0,0,FLAGS)
如 果 要 取 消 總 在 最 前 面 的 特 性 , 則 可 以 執(zhí) 行 如 下 的 代 碼:
success=SetWindowPos(frmExample.hWnd,HWND_NOTOPMOST,0,0,0,0,FLAGS)
success 不 等 于0 表 示SetWindowPos 執(zhí) 行 成 功 。
在MDI 程 序 里 , 有 一 個(gè) 窗 口 是 所 有 其 他 窗 口 的 父 窗 口 , 各 個(gè) 子 窗 口 完 成 相 對(duì) 獨(dú) 立 的 功 能 , 就 像 是 多 個(gè) 獨(dú) 立 的 工 具 組 合 起 來(lái) 一 樣 。 在 這 方 面 ,MS Word 和Windows 的File Manager 是 最 好 的 例 子 。