国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
在VisualC++中建立MFC擴展DLL
 

在 Visual C++ 中 建 立 MFC 擴 展 DLL    我 們 編 寫 了 一 個 擴 展 類 的 樣 例 并 將 其 封 裝 在 DLL 中 以 向 你 演 示 該 過 程。

    有 經(jīng) 驗 的 Windows 編 程 人 員 都 逐 漸 放 棄 了 Windows SDK, 而 轉(zhuǎn) 向 能 為 Windows 內(nèi) 置 的 低 級 機 制 提 供 高 級 抽 象 的 開 發(fā) 環(huán) 境。 這 種 轉(zhuǎn) 移 的 一 個 主 要 受 益 者 是 Visual C++, 它 依 靠 MFC 庫 來 提 供 Windows API 的 面 向 對 象 的 視 圖。

    MFC 是 經(jīng) 驗 豐 富 的 編 程 人 員 掌 握 的 有 力 工 具, 但 它 離 完 美 還 相 距 甚 遠(yuǎn)。 事 實 上, 我 所 認(rèn) 識 的 以 MFC 編 程 為 謀 生 手 段 的 人 都 開 發(fā) 了 他 或 她 自 己 的 擴 展 集 合, 他 們 以 MFC 類 作 為 基 礎(chǔ) 類 來 派 生 自 己 的 類。 這 畢 竟 是 C++ 的 威 力。 如 果 某 個 類 不 能 滿 足 你 的 需 求 ( 而 且 如 果 它 恰 好 可 以 作 為 設(shè) 計 的 開 始 ), 你 可 以 從 它 自 由 地 派 生 新 類 并 修 改 你 不 喜 歡 的 部 分。

    假 設(shè) 你 編 寫 了 一 個 MFC 擴 展 集 合, 并 愿 意 與 公 司 的 其 它 開 發(fā) 人 員 共 享。 你 該 如 何 封 裝 這 些 擴 展 呢? 你 可 以 分 發(fā) 源 代 碼 文 件 或 與 Visual C++ 組 件 庫(Component Gallery) 兼 容 的 組 件。 或 許 你 可 以 象 MFC 那 樣 在 DLL 中 封 裝 你 的 擴 展。 就 象 傳 統(tǒng) 的 DLL 能 夠 導(dǎo) 出 函 數(shù) 一 樣, MFC 擴 展 DLL 可 以 導(dǎo) 出 類。 任 何 動 態(tài) 鏈 接 到 MFC DLL 的 應(yīng) 用 程 序 都 能 動 態(tài) 鏈 接 到 MFC 擴 展 DLL。 作 為 開 發(fā) 者, 你 只 需 使 其 包 括 必 要 的 頭 文 件 并 在 應(yīng) 用 程 序 的 鏈 接 列 表 中 添 加 DLL 導(dǎo) 入 庫。

   編 寫 MFC 擴 展 DLL 困 難 嗎? 有 了 Visual C++ 和 MFC 的 支 持, 這 實 際 非 常 輕 松。 本 文 解 釋 了 如 何 創(chuàng) 建 MFC 擴 展 DLL 來 彌 補 MFC 的 CToolTipCtrl 類 的 明 顯 不 足。 一 旦 意 識 到 其 簡 便 性, 你 會 忍 不 住 親 自 編 寫 幾 個 MFC 的 擴 展。

    編 寫 MFC 擴 展 DLL

   從 理 論 角 度 而 言, MFC 的 CTool-TipCtrl 類 簡 化 了 將 提 示 信 息(ToolTip) 與 對 話 框 的 控 件 或 窗 口 的 任 意 區(qū) 域 相 關(guān) 聯(lián) 的 過 程。 ( 提 示 信 息 是 當(dāng) 鼠 標(biāo) 光 標(biāo) 停 滯 于 工 具 欄 按 鈕 或 其 它 UI 對 象 時 彈 出 的 小 型 幫 助 文 本 窗 口。 ) 但 有 個 問 題 尚 待 解 決。 由 于 CToolTipCtrl::AddTool 不 能 自 動 成 為 提 示 信 息 依 附 的 窗 口 的 子 類, 因 此 鼠 標(biāo) 事 件 必 須 手 工 轉(zhuǎn) 交 給 提 示 信 息 控 制。 這 通 常 意 味 著 你 必 須 自 己 給 窗 口 建 立 子 類。

    如 果 你 給 CToolTipCtrl 對 象 下 的 提 示 信 息 控 制 傳 送 了 正 確 的 標(biāo) 志, 它 應(yīng) 該 能 給 自 己 創(chuàng) 建 子 類 ―― 這 顯 然 是 被 MFC 設(shè) 計 組 忽 略 的 功 能。 幸 運 的 是, 該 疏 忽 并 不 難 以 糾 正。 只 要 從 CToolTipCtrl 類 中 派 生 出 一 個 類, 用 類 似 的 函 數(shù) 代 替 CToolTipCtrl::AddTool 即 可, 該 函 數(shù) 的 TTM_ADDTOOL 消 息 使 用 TOOLINFO 結(jié) 構(gòu), 它 的 uFlags 域 中 包 含 TTF_SUBCLASS 標(biāo) 志。 更 好 的 方 式 是 用 兩 個 函 數(shù) 代 替 它: 它 們 分 別 給 子 窗 口 和 矩 形 窗 口 區(qū) 域 添 加 提 示 信 息。 AddTool 函 數(shù) 同 時 支 持 兩 者, 但 在 語 法 結(jié) 構(gòu) 上 創(chuàng) 建 提 示 信 息 的 兩 種 方 法 截 然 不 同。

    圖 1 和 圖 2 顯 示 了 名 為 CToolTip-CtrlEx 的 CToolTipCtrl 的 派 生 類 的 源 代 碼。 該 派 生 類 給 它 繼 承 的 內(nèi) 容 添 加 了 兩 個 函 數(shù), 其 一 CToolTipCtrl::AddWindow 將 提 示 信 息 與 子 窗 口 相 關(guān) 聯(lián), 其 二 AddRectangle 使 提 示 信 息 依 附 于 窗 口 的 矩 形 區(qū) 域。 這 兩 個 函 數(shù) 都 使 用 了 TTF_SUBCLASS 標(biāo) 志 以 使 提 示 信 息 的 創(chuàng) 建 過 程 盡 可 能 簡 單。 假 設(shè) m_tooltipCtrl 是 CToolTipCtrlEx 對 象, 給 控 制 ID 為 IDC_BUTTON 的 按 鈕 添 加 提 示 信 息 就 非 常 容 易 了:

    m_tooltipCtrl.AddWindow (

    GetDlgItem (IDC_BUTTON),

    "Enter tooltip text here!");

    如 何 將 CToolTipCtrlEx 類 封 裝 至 DLL 呢? 以 下 是 在 Visual C++ 4.x 中 的 詳 細(xì) 步 驟:

    1. 啟 動 Visual C++ 并 通 過 從 File 菜 單 選 擇 New 來 創(chuàng) 建 新 項 目, 雙 擊 Project Workspace。 在 New Project Workspace 的 Name 框 中 輸 入 “MfcExt”( 不 帶 引 號 )。 在 Type 框 中 選 擇 MFC AppWizard(dll)。 然 后 點 擊 Create 按 鈕。

    2. 在 AppWizard 的 Step 1 對 話 框 中, 通 過 在“What type of DLL would you like to create?” 項 中 選 擇“MFC Extension DLL(using shared MFC DLL)”。 點 擊 Finish 按 鈕, 然 后 點 擊 OK 產(chǎn) 生 DLL 的 初 始 代 碼。 注 意“MFC Extension DLL” 后 括 弧 中 顯 示 的“using shared MFC DLL”。 當(dāng) 你 編 寫 MFC 擴 展 DLL 時, 不 能 選 擇 靜 態(tài) 鏈 接 至 MFC。 DLL 必 須 動 態(tài) 鏈 接 到 MFC 庫。

    3. 彈 出 ClassWizard 并 點 擊 Add Class 按 鈕。 選 擇 New 打 開 Create New Class 對 話 框。 在 其 中 標(biāo) 有“Base class” 的 框 中 選 擇 CToolTipCtrl, 在 標(biāo) 有“Name” 的 框 中 輸 入“CToolTipCtrlEx”。 使 用 Change 按 鈕 將 文 件 名 改 為 Tooltip.h 和 Tooltip.cpp。(改 變 文 件 名 并 不 是 絕 對 必 要 的, 我 這 樣 做 是 為 了 避 免 長 文 件 名。) 不 要 選 中“Add to Component Gallery” 框 以 節(jié) 省 磁 盤 空 間。 點 擊 Create 命 令 ClassWizard 執(zhí) 行 類 派 生, 而 后 點 擊 OK 退 出 ClassWizard。

    4. 如 圖 2 所 示, 給 CToolTipCtrlEx 類 添 加 成 員 函 數(shù) AddWindow 和 AddRectangle。 由 于 這 兩 個 函 數(shù) 要 在 CToolTipCtrlEx 外 被 訪 問, 因 此 確 定 它 們 都 是 public 的。 技 巧: 在 Visual C++ 中 給 類 添 加 成 員 函 數(shù) 的 簡 便 方 法 是 在 ClassView 窗 口 中 右 擊 類 名, 并 從 快 捷 菜 單 中 選 擇 Add Function。

    5. 在 ClassView 窗 口 中, 雙 擊 CToolTipCtrlEx 打 開 類 的 頭 文 件。 在 類 說 明 的 class 關(guān) 鍵 字 后 添 加 AFX_EXT_CLASS(參 見 圖 1)。

    6. 建 立 項 目。 你 將 產(chǎn) 生 兩 個 重 要 文 件: DLL 本 身(Mfcext.dll) 以 及 DLL 的 導(dǎo) 入 庫(Mfcext.lib)。 導(dǎo) 入 庫 基 本 上 是 導(dǎo) 出 函 數(shù) 名 的 列 表 ―― 或 者, 在 本 例 中 是 一 系 列 導(dǎo) 出 類。 鏈 接 至 導(dǎo) 入 庫 使 應(yīng) 用 程 序 能 使 用 從 MFC 擴 展 DLL 中 導(dǎo) 出 的 類, 就 如 同 包 含 類 的 庫 是 靜 態(tài) 鏈 接 的 一 樣。 與 Mfcext.lib 鏈 接 還 使 得 Windows 知 道 應(yīng) 用 程 序 需 要 Mfcext.dll 才 能 運 行。

    使 用 MFC 擴 展 DLL

  創(chuàng) 建 使 用 Mfcext.dll 的 應(yīng) 用 程 序 是 輕 而 易 舉 的。 只 要 確 保 在 使 用 CToolTipCtrlEx 的 每 個 類 中 包 括 Tooltip.h 頭 文 件, 并 且 將 Mfcext.lib 添 加 至 項 目 的 鏈 接 庫 列 表 中 即 可。 然 后 CToolTipCtrlEx 就 可 以 象 普 通 MFC 類 那 樣 使 用 了。 當(dāng) 回 答 AppWizard 的 詢 問 時 一 定 要 選 擇“As a shared DLL”, 這 樣 你 的 應(yīng) 用 程 序 才 能 動 態(tài) 鏈 接 至 MFC。 你 可 以 通 過 從 Visual C++ 的 Build 菜 單 中 選 擇 Settings 將 Mfcext.lib 添 加 至 項 目 的 鏈 接 列 表 中, 點 擊 Link 標(biāo) 簽 并 在 標(biāo) 有“Object/library modules” 的 框 中 輸 入 Mfcext.lib 的 路 徑(參 見 圖 3)。

    ToolTest 是 作 為 樣 例 的 應(yīng) 用 程 序, 它 在 對 話 框 中 顯 示 一 個 按 鈕。 它 動 態(tài) 鏈 接 至 Mfcext.dll 并 使 用 CToolTipCtrlEx。 該 應(yīng) 用 程 序 是 基 于 對 話 框 的, dialog 類 包 含 名 為 m_tooltipCtrl 的 CToolTipCtrlEx 成 員 變 量。 對 話 框 的 OnInitDialog 函 數(shù) 中 的 以 下 代 碼 創(chuàng) 建 提 示 信 息 控 制 并 給 對 話 框 的 按 鈕 設(shè) 置 提 示 信 息:

    m_tooltipCtrl.Creat (this);

    m_tooltipCtrl.AddWindowTool (

    GetDlgItem (IDC_EXIT),

    "Click here to close");

    當(dāng) 光 標(biāo) 停 在 按 鈕 上 時, 提 示 信 息 窗 口 中 顯 示“Click here to close”。 點 擊 該 按 鈕 可 以 關(guān) 閉 應(yīng) 用 程 序。

    你 可 以 從 PC Magazine Online(www.pcmag.com) 下 載 ToolTest 和 Mfcext.dll 的 完 整 源 代 碼。 從 主 頁 左 側(cè) 的 菜 單 中 選 擇 Downloads, 然 后 依 次 選 擇 PC Tech Archives 和 文 件 V16n15.zip。 CompuServe 的 Utilities/Tips 論 壇(GO ZNT:TIPS) 上 也 有 該 文 件。 我 們 的 文 件 包 含 在 該 歸 檔 文 件 中。 使 用 PKUNZIP 的 -d 開 關(guān) 解 壓 文 件(Mfcext.zip 和 Tooltest.zip), 以 便 .ZIP 文 件 中 的 目 錄 也 能 一 同 被 解 壓。 在 運 行 ToolTest 之 前, 將 Mfcext.dll 拷 貝 至 Windows 系 統(tǒng) 目 錄 或 Tooltest.exe 所 在 的 目 錄。 否 則, 當(dāng) 執(zhí) 行 ToolTest 時, Windows 可 能 找 不 到 Mfcext.dll。 如 果 你 打 算 建 立 自 己 的 Tooltest.exe 版 本, 修 改 Project Settings 對 話 框 的“Object/library modules” 框 的 路 徑 名, 使 Visual C++ 能 獲 悉 在 PC 的 何 處 尋 找 Mfcext.lib 文 件。

    總 結(jié)

    創(chuàng) 建 MFC 擴 展 DLL 非 常 容 易 ―― 只 要 你 知 道 了 該 如 何 操 作。 當(dāng) 你 給 其 它 開 發(fā) 人 員 分 發(fā) MFC 擴 展 DLL 時, 不 要 忘 記 提 供 描 述 DLL 中 類 的 頭 文 件 以 及 相 應(yīng) 的 .LIB 文 件 和 DLL 本 身。 此 后 開 發(fā) 人 員 就 能 充 分 利 用 你 裝 配 的 擴 展 了。

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Win XP系統(tǒng)故障實用修復(fù)方法
MFC在線英文教程DLL
利用VC調(diào)用動態(tài)鏈接庫中的函數(shù)
mfc42u.dll修復(fù)
MFC DLL 向?qū)У膽?yīng)用程序設(shè)置
DLL(Dynamic Link Libraries)
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服