种 协 议, 那 么 计 算 机 A 向 计 算 机 B 通 过 邮 槽 发 送 消 息, 则 计 算 机 B 将 会 收 到 两 条 一 样 的 消 息。 为 了 过 滤 掉 多 余 的 消 息, 我 们 给 每 条 消 息 生 成 一 个 唯 一 的 随 机 数 ID, 接 收 消 息 时 只 保 留 其 中 一 条, 其 余 的 简 单 抛 弃 即 可。
三、 界 面
----我 们 一 直 认 为 系 统 托 盘 区 是 桌 面 上 比 较 敏 感 的 区 域, 只 有 那 些 对 某 个 事 件 进 行 监 视 的 应 用 才 应 该 在 系 统 托 盘 区 放 置 图 标, 否 则 只 能 使 人 反 感。 而 WinPopupEx 正 好 符 合 这 个 条 件, 它 将 一 直 在 后 台 运 行, 当 有 消 息 到 达 时, 我 们 不 停 地 闪 动 图 标 并 通 过 系 统 音 频 发 出 电 话 振 铃 的 声 音, 以 这 种 方 式 提 醒 用 户, 直 到 程 序 被 用 户 手 工 切 换 到 前 台, 见 图2。 既 然 在 系 统 托 盘 区 放 置 了 图 标, 那 么 系 统 任 务 条 按 钮 就 不 需 要 了, 它 被 函 数 ShowWindow( SW_HIDE ) 隐 藏 了 起 来。
---- 程 序 的 主 窗 口 被 分 为 上 下 两 部 分, 上 面 是 一 个 ListCtrl, 它 的 内 容 包 括 消 息 发 送 人、 接 收 人、 接 收 时 间 和 消 息 正 文 的 摘 要; 下 面 是 一 个 RichEditCtrl, 通 过 选 择 上 面 列 表 中 的 项 目, 这 里 将 会 显 示 该 消 息 正 文 的 详 细 内 容。 这 两 个 子 窗 口 的 字 体 和 颜 色 都 是 可 以 定 制 的。
四、 消 息 的 保 存
----原 来 的 WinPopup 最 不 足 的 地 方 就 是 历 史 消 息 不 能 保 存 下 来, 每 次 重 新 打 开 它 都 是 一 片 空 白。 而 我 们 通 过 网 络 的 交 流 一 般 都 希 望 保 存 下 来 以 后 再 看 看。 这 个 功 能 实 现 起 来 并 不 复 杂, 每 次 程 序 被 关 闭 时, 它 都 将 所 有 的 消 息 写 入 处 于 同 一 目 录 下 的 WinPopupEx.History 文 件 中, 每 次 运 行 时 也 从 这 个 文 件 中 读 入, 并 将 它 填 入 程 序 对 应 的 消 息 结 构 中 即 可。
五、 开 机 自 动 运 行
----要 让 一 个 程 序 开 机 自 动 运 行 并 不 是 一 个 新 技 术, 您 只 需 往 系 统 注 册 表 中 新 建 一 个 键 值 就 可 以 实 现, 即 在 “Software\\Microsoft\\windows\\CurrentVersion\\Run" 下 新 建 一 个 键, 键 名 为 “WinPopupEx", 值 为 您 的 WinPopupEx.EXE 所 在 的 磁 盘 路 径。 让 我 们 考 虑 另 外 一 种 情 况:“ 如 果 关 机 时 WinPopupEx 仍 在 运 行, 请 在 下 次 开 机 时 自 动 运 行 它”。 这 就 需 要 一 点 技 巧, 我 们 要 注 意 两 条 Windows 消 息, 一 个 是 WM_QUERYENDSESSION, 每 当 Windows 准 备 关 闭 时, 它 都 会 向 所 有 运 行 的 程 序 发 送 这 条 消 息, 通 知 系 统 准 备 关 机, 这 时 我 们 用 一 个 BOOL 变 量 将 这 个 信 息 保 存 起 来, 如: theApp.m_bShutDown = TRUE, 并 返 回 TRUE 同 意 关 闭 系 统; 另 一 个 是 WM_ENDSESSION, 当 Windows 从 所 有 程 序 的 WM_QUERYENDSESSION 处 理 结 果 那 里 都 得 到 TRUE, 它 就 将 以 TRUE 为 参 数 再 次 广 播 WM_ENDSESSION 消 息, 如 果 某 个 程 序 的 WM_QUERYENDSESSION 处 理 返 回 FALSE, 那 么 将 以 FALSE 为 参 数。 在 我 们 的 WM_ENDSESSION 消 息 处 理 中, 通 过 判 断 那 个 参 数 就 可 以 确 定 本 次 程 序 的 退 出 是 否 是 因 为 系 统 关 机, 这 个 信 息 被 保 留 到 WM_CLOSE 中 处 理, 只 有 关 机 造 成 的 退 出 才 往 系 统 注 册 表 中 写 前 面 那 个 键 值, 这 样 就 达 到 了 我 们 的 目 的。