⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 0516005.htm

📁 VC知识库5_chm_decompile_20040520_210715
💻 HTM
📖 第 1 页 / 共 2 页
字号:
<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<title></title>
<link rel="stylesheet" type="text/css" href="../../vckbase.css">
</head>

<body>

<div align="justify">
  <table border="0" width="100%" class="font" height="57">
    <tr>
      <td width="27%" height="6" class="bigfont" bgcolor="#B8CFE7" align="center" bordercolor="#800080">
      <font color="#800080">VC知识库(五)</font>
      </td>
      <td width="73%" height="6" class="bigfont" bgcolor="#B8CFE7" align="center" bordercolor="#800080">
      <font color="#800080">www.vckbase.com</font>
      </td>
    </tr>
    <tr>
      <td width="100%" height="4" class="header" valign="top" align="center" colspan="2">
      <hr>
      </td>
    </tr>
    <tr>
      <td width="100%" height="17" class="header" valign="top" align="center" colspan="2">
      <font

        color="#0000FF">利用VC++编写Windows95的CPL组件 </font>
      </td>
    </tr>
    <tr>
      <td width="100%" height="17" class="info" align="center" colspan="2">
      解放军信息工程学院 <font 
 
        color="#FFFFFF">--</font>王琰
      </td>  
    </tr>  
    <tr> 
      <td width="100%" height="22" class="font" colspan="2">
        <hr>
      </td>  
    </tr> 
    <tr> 
      <td width="100%" height="5" class="font" colspan="2"> 

        <p><font color="#FFFFFF">----</font> 控 制 面 板 是Windows 
 
        95 的 控 制 中 心, 通 过 它 可 以 完 成 添 
 
        加 新 硬 件 设 备、 改 变 桌 面 设 置、 配 
 
        置 网 络 协 议 等 多 项 工 作。 在Windows 95 
 
        中, 控 制 面 板 通 常 有20 多 个 组 件, 
 
        我 们 只 要 用 鼠 标 双 击 任 一 组 件 的 
 
        图 标, 就 会 弹 出 一 个 对 话 框, 对 话 
 
        框 包 含 有 设 置 一 些 系 统 参 数 的 选 
 
        项, 这 些 参 数 的 绝 大 多 数 都 存 放 
 
        在Windows 95 的 注 册 表 中。</p> 
 
        <p><font color="#FFFFFF">----</font> 控 制 面 板 的 
 
        主 程 序 是CONTROL.EXE, 它 在 启 动 时 自 动Winndows\System 
 
        目 录 下 查 找 并 调 入 文 件 扩 展 名 为CPL 
 
        的 控 制 面 板 组 件。 控 制 面 板 组 件 
 
        是 可 以 扩 充 的, 一 些 软 件 在 安 装 
 
        过 程 中 会 自 动 加 入 新 的 控 制 面 板 
 
        组 件。 按 照Windows 用 户 界 面 设 计 原 则 
 
        的 规 定, 凡 是 影 响 到 系 统 的 整 体 
 
        行 为 和 界 面 风 格 的 各 项 参 数 都 应 
 
        该 通 过 控 制 面 板 来 设 置, 因 此 掌 
 
        握 控 制 面 板 组 件 的 编 程 方 法 是 很 
 
        有 必 要 的。 </p> 
 
        <h3><font color="#0000C0">控 制 面 板 组 件 的 工 
 
        作 原 理 </font><font color="#FFFFFF">----</font> 控 
 
        制 面 板 的 各 个 组 件 都 是 一 些 特 殊 
 
        的 动 态 链 接 库, 只 不 过 它 们 的 扩 
 
        展 名 不 是DLL, 而 是CPL, 即Control Panel 的 
 
        缩 写。</h3> 
 
        <p><font color="#FFFFFF">----</font> CONTROL.EXE 启 动 
 
        后 会 依 次 调 入 在 系 统 目 录 下 查 找 
 
        到 的CPL 库。 一 般 来 说, 一 个CPL 库 只 
 
        负 责 管 理 某 一 方 面 的 设 置, 对 应 
 
        着 控 制 面 板 中 的 一 个 组 件( 即 一 个 
 
        图 标), 但 也 有 少 数CPL 库 支 持 多 个 
 
        组 件。 </p> 
 
        <p><font color="#FFFFFF">----</font> 每 个CPL 库 必 
 
        须 输 出 一 个 叫CPlApplet() 的 函 数 供CONTROL.EXE 
 
        调 用,CPlApplet() 具 有 以 下 原 型: </p> 
 
        <pre>

                    typedef LONG (APIENTRY *APPLET_PROC)(HWND hwndCpl, UINT msg,

                                        LONG lParam1,LONG lParam2);

</pre> 
 
        <p><font color="#FFFFFF">----</font> 容 易 看 出,CPlApplet() 
 
        与 普 通 窗 口 处 理 函 数 的 形 式 很 相 
 
        似, 事 实 上, 控 制 面 板 正 是 以 发 送 
 
        消 息 的 方 式 与CPL 库 进 行 通 信。 参 数hwndCpl 
 
        为 控 制 面 板 的 窗 口 句 柄,msg 为 消 息 
 
        标 识,lParam1 和lParam2 为 附 加 的 两 个 参 
 
        数, 具 体 的 意 义 视msg 的 值 而 定。 </p> 
 
        <p><font color="#FFFFFF">----</font> 控 制 面 板 用LoadLibrary() 
 
        函 数 把CPL 库 调 入 内 存 以 后, 立 刻 向CPlApplet() 
 
        发 送 一 条CPL_INIT 消 息, 指 示CPL 库 作 初 
 
        始 化 工 作。</p> 
 
        <p><font color="#FFFFFF">----</font> 因 为 这 是 唯 
 
        一 允 许 返 回 失 败 信 息 的 消 息, 所 
 
        以CPL 库 此 时 应 该 分 配 运 行 过 程 中 
 
        需 要 的 所 有 内 存 和 资 源, 如 果 因 
 
        为 内 存 不 够 或 者 其 它 原 因 不 能 继 
 
        续, 就 返 回 零 值, 控 制 面 板 将 不 再 
 
        处 理 这 个CPL 库, 并 自 动 卸 下 它。 </p> 
 
        <p><font color="#FFFFFF">----</font> 所 有CPL 库 初 
 
        始 化 完 毕 后, 控 制 面 板 再 向 每 个CPL 
 
        库 的CPlApplet() 函 数 发 送 一 条CPL_GETCOUNT 
 
        消 息, 此 时CPL 库 返 回 它 所 支 持 的 组 
 
        件 数。 接 下 来, 控 制 面 板 再 针 对 每 
 
        一 个 组 件 向CPlApplet() 函 数 发 送 多 条CPL_NEWINQUIRE 
 
        消 息, 目 的 是 取 得 每 个 组 件 对 应 
 
        的 图 标、 名 称 和 提 示 信 息,CPL 库 可 
 
        以 在 处 理 这 条 消 息 时 依 次 初 始 化 
 
        各 个 组 件 的 对 话 框。 在Windows 3.x 中, 
 
        控 制 面 板 发 送 的 是CPL_INQUIRE 消 息, 考 
 
        虑 到 兼 容 性 的 问 题, 这 条 消 息 在Windows 
 
        95 中 被 保 留 下 来 了, 但 是 基 于WIN 32 
 
        的CPL 库 只 需 处 理 新 的CPL_NEWINQUIRE 消 
 
        息。 </p> 
 
        <p><font color="#FFFFFF">----</font> 进 行 到 这 一 
 
        步 后, 控 制 面 板 显 示 出 所 有 组 件 
 
        的 图 标, 并 开 始 接 受 用 户 的 选 择。 
 
        当 用 户 双 击 某 个 组 件 的 图 标 时, 
 
        控 制 面 板 向 该 组 件 所 在 的CPL 库 发 
 
        送 一 条CPL_DBLCLK 消 息, 并 指 明 用 户 选 
 
        择 的 是 该CPL 库 中 的 第 几 个 组 件,CPL 
 
        库 在 接 到 这 条 消 息 后 从INI 文 件 或Windows 
 
        95 的 注 册 表 中 读 出 要 处 理 的 系 统 
 
        参 数 的 原 始 值, 并 启 动 相 应 的 对 
 
        话 框, 允 许 用 户 改 变 设 置。 当 用 户 
 
        在 修 改 过 程 中 按 下 应 用(Apply) 按 钮 
 
        后,CPL 库 保 存 新 的 参 数 并 返 回 到 控 
 
        制 面 板 中; 如 果 用 户 取 消 了 所 作 
 
        修 改,CPL 库 只 需 返 回 即 可。 </p> 
 
        <p><font color="#FFFFFF">----</font> 控 制 面 板 在 
 
        被 关 闭 时 会 对 每 个 组 件 发 送 一 条CPL_STOP 
 
        消 息, 接 着 对 每 个CPL 库 发 送 一 条CPL_EXIT 
 
        消 息, 此 时CPL 库 释 放 在CPL_INIT 消 息 中 
 
        分 配 的 内 存 和 资 源。 最 后 控 制 面 
 
        板 依 次 卸 下 各 个CPL 库 并 退 出。 </p> 
 
        <p><font color="#FFFFFF">----</font> 上 面 叙 述 的 
 
        就 是 控 制 面 板 组 件 的 工 作 原 理, 
 
        其 中 各 条 消 息 的 具 体 参 数 定 义 请 
 
        参 考WIN 32 SDK。 </p> 
 
        <h3><font color="#0000C0">利 用VC++ 编 写 控 制 面 
 
        板 组 件 </font><font color="#FFFFFF">----</font> 编 
 
        写 控 制 面 板 组 件 实 际 上 是 编 写DLL, 
 
        利 用Visual C++ 这 个 强 大 的 可 视 化 编 程 
 
        工 具 可 以 很 方 便 地 完 成 这 项 工 
 
        作。MFC 基 本 类 库 为 我 们 封 装 了DLL 的 
 
        基 本 框 架, 我 们 只 需 编 写 处 理 消 
 
        息 的CPlApplet() 函 数 和 各 个 组 件 的 对 
 
        话 框 即 可。 遗 憾 的 是,MFC 类 库 中 没 
 
        有 现 成 的 关 于 控 制 面 板 组 件 的 
 
        类, 为 了 充 分 利 用C++ 语 言 可 继 承 性 
 
        的 优 点, 本 文 后 面 的 程 序 给 出 了 
 
        一 个 控 制 面 板 组 件 的 基 类CControlPanel, 
 
        它 的 成 员 函 数 提 供 了 处 理 各 种CPL 
 
        消 息 的 缺 省 代 码, 我 们 只 要 从 这 
 
        个 基 类 派 生 出 新 的 子 类, 并 为 需 
 
        要 处 理 的 消 息 重 载 相 应 的 代 码, 
 
        就 可 以 迅 速 建 立 一 个 控 制 面 板 组 
 
        件。 </h3> 
 
        <p><font color="#FFFFFF">----</font> 利 用Visual C++ 
 
        中 编 写 控 制 面 板 组 件 的 步 骤 如 
 
        下: </p> 
 
        <ol> 
 
            <li>调 用AppWizard 建 立 一 个 新 的 项 
 
                目, 将 应 用 程 序 类 型 为 设 使 
 
                用MFC 的DLL, 并 把MFC 类 库 作 为 静 
 
                态 库 连 接, 按 下Finish 按 钮, 让AppWizard 
 
                自 动 生 成 框 架 文 件。 <br> 
 
                </li> 
 
            <li>把 本 文 后 面 的CtrlPan.CPP 加 入 到 
 
                项 目 中, 把CPlApplet 添 加 到DEF 文 
 
                件 的 输 出 名 表 中, 然 后 选 择Build 
 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -