希 望 该 程 序 能 在 其Main Frame Window 出 现 在 屏
幕 后 自 动 运 行, 而 无 需 等 待 任 何 消 息。 所 以 想 知 道 哪 些 函 数 在 窗 口 出 现 后 会 被 自 动 调 用 ?
首 先, 在Windows 中 没 有 任 何 一 个 消 息 用 来 通 知 窗 口 初 始 化 完 毕, 所 以 在VC 中 也 没 有 相 应 的 函 数, 但 您 的 问 题 可 用 下 面 的 办 法 解 决。
用VC++ 5.0 编 写 应 用 程 序,MFC AppWizard 会 自 动 生 成 程 序 的 框 架, 其 中CTestView 类 的 函 数OnDraw() 在 窗 口 出 现 后 自 动 调 用。 当 然, 此 函 数 在 窗 口 的 大 小 发 生 改 变( 如 最 大、 最 小 化) 以 及 窗 口 由 被 遮 住( 一 部 分) 到 重 新 显 现 时 也 会 被 调 用。 所 以 为 了 使 某 些 代 码 能 够 自 动 运 行 并 且 只 运 行 一 次, 除 了 要 将 其 代 码 写 在OnDraw() 函 数 中 外, 还 要 在CTestView 类 中 添 加 一 个 用 于 标 记 的BOOL 型 变 量x( 用 户 可 以 自 己 定 义 变 量 名), 在 该 类 的 构 造 函 数 中 赋 值 为true。 在OnDraw() 函 数 里 加 上 判 断 语 句: 当x 为true 时 执 行 要 求 首 先 运 行 的 代 码, 然 后 将x 置 为false; 当x 为false 时 什 么 也 不 做。 这 样 就 可 以 保 证 特 定 的 代 码 在 窗 口 出 现 时 自 动 运 行 而 且 只 执 行 一 次。 具 体 的 程 序 片 段 如 下(CTestView.h 文 件 中):
class CTestView : public Cview
{
public:
BOOL x;
…… // 其 他 的 语 句
}
(CTestView.cpp 文 件 中):
CTestView::CTestView()
{
// add construction code here
x=TRUE;
}
void CTestView::OnDraw(CDC* pDC)
{
CTestDoc*pDoc=GetDocument();
ASSERT_VALID(pDoc);
if(x==TRUE )
{
x=FALSE;
……// 要 求 首 先 运 行 的 代 码
}
}
