《2023年MFC学习笔记.pdf》由会员分享,可在线阅读,更多相关《2023年MFC学习笔记.pdf(150页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第 一 课 1.M FC生 成 的 C+源 文 献 中 都 有 StdAfx.h,此 文 献 包 含 了 常 用 的 A F X 函 数 的 声 明,其 中 有 a fx w in.h,此 文 献 包 含 了 CR ECT,CP。i n t,C Wn d 等 许 多 类 及 其 方 法 的 声 明。2.Pro ject-S e tting-D ebug可 以 加 入 命 令 行 参 数。3.在 SDK 中 要 力 口 入 wind o ws.h和 s t di o.h。由 于 LoadCur s or,Mes s age Box 等 函 数 的 声 明 在 这 个 文 献 中。4.创 建 一
2、个 完 整 的 窗 口 的 四 个 环 节 SDK,1设 计 窗 口 类,2注 册 窗 口 类,3创 建 窗 口,4 显 示 窗 口 5.函 数 名 可 以 代 表 函 数 代 码 的 首 地 址,即 可 作 为 函 数 指 针。6.要 查 看 V C数 据 类 型,可 以 在 M S D N中 输 入“BOOL”然 后 选 择“DA TA TY PE”。7.ato f 将 字 符 串 转 化 为 f l oat,ato i 将 字 符 串 转 化 为 in t 型。8.所 有 从 C W nd类 派 生 的 类 都 有 m_hWn d 句 柄。9.变 量 的 生 命 周 期:可 以 认 为
3、出 了 包 含 它 的 大 括 号,这 个 变 量 的 生 命 周 期 结 束。所 以 全 局 变 量 的 声 明 位 于 所 有 大 括 号 之 外。但 是 用 n e w 声 明 的 变 量 和 用 s t a t i c 声 明 的 变 量 除 外。10.S D K示 范 程 序,见 下 面。1 l.sprin t f 格 式 化 字 符,其 头 文 献 为 std i o.h,在 M F C 中 格 式 化 字 符 用 C S t r i ng.Format1 2.GetD C()与 R e le a s e D C()要 成 对 使 用,否 则 会 内 存 泄 漏。同 样,B e g
4、 in Paint。与 E nd Pain t()o1 3.G etS tockO b J e c t()得 到 画 笔、画 刷、字 体、调 色 板 的 句 柄,使 用 时 必 须 用 类 型 转 换。1 4.什 么 时 候 用 N U L L,什 么 时 候 用 0.答,对 指 针 赋 值 时 用 N U L L,对 变 量 赋 值 时 用 0.15.什 么 是 野 指 针?答:将 指 针 指 向 的 变 量 的 内 存 释 放 后,此 指 针 即 变 成 野 指 针!如 何 避 免 野 指 针?答:将 此 指 针 指 向 N U L L即 可。p=NULL;16.SDK代 码 流 程:#i
5、ncl u de wind o w s.h 包 含 头 文 献 L o ad C ursor,TextOu t 等 函 数#i nclud e n s tdio.h*/包 含 sp r i n t f,pri n tf 等 函 数 LRE SULT CALLBACK MyProc(.);声 明 回 调 函 数 int WIN API W i nMai n()!W NDCLAS S wnd c Is;/设 计 窗 口 类 wnd c 1 s.h cursor=Lo a dCur s o r();/初 始 化 RegisterC 1 ass(&wndcls);注 册 窗 口 类 hwnd=Cr e
6、 ateWin d ow(.);创 建 窗 口 ShowWi n dow(显 示 窗 口 UpdateWind o wMSG msg;/定 义 消 息 结 构 体 while(GetMe s s a g e(.)消 息 循 环()r e turn 0;)LRESU LT CA LLB A CK My P ro c()实 现 回 调 函 数(switch(uMs g)(c a s e WM_CHA R:brea k;第 2课 1.定 义 结 构 体 和 类 时 别 忘 掉 在 最 后 加 入;号!例 如 Class Po i n tin t x;i n t y;2.#i ncl u d e V
7、x x x.h 与#inclu d e xxx.h的 区 别:不 查 找 运 营 时 目 录,查 找 运 营 时 目 录!3.类 的 定 义 中,假 如 未 指 明 成 员 类 型,则 缺 省 为 p riv ate.而 结 构 体 中 则 缺 省 为 public.4.引 用:引 用 经 常 用 在 函 数 的 传 参 上。此 外 数 值 互 换 函 数 也 经 常 用 引 用。例 c ha n ge(i n t&x,i nt&y)int temp;t e mp=x;x=y;y=x 调 用 时 即 可 以 用 in t a=3;intb=4;change(a,b);一 般 不 用 指 针 来
8、 作 为 参 数 进 行 数 值 互 换。由 于 会 引 起 歧 义。5.通 常 将 类 的 定 义 放.h 文 献,而 将 其 实 现 放 在 c p p文 献 中,别 忘 掉 了 在 c p p文 献 中#inc 1ude xxx.h 6.如 何 防 止 类 的 反 复 定 义?用#innd e f P o i#define P o i n t _H_Hclass P o in t;#endi f 来 防 止 7.源 文 献 cpp文 献 单 独 编 译 成。b j文 献。最 后 由 链 接 器 将 与 将 要 使 用 到 的 C+标 准 库 类 链 接 成 exe文 献,头 文 献 不
9、参 与 编 译。所 以 在 c p p文 献 中 别 忘 掉 了 加 入#i nclud e x xx.h 8.函 数 的 覆 盖,在 子 类 中 重 写 父 类 的 函 数,此 时 采 用 初 期 绑 定 的 方 法。假 如 加 入 了 vi r tu a l,则 将 采 用 迟 绑 定 的 技 术,在 运 营 时 根 据 对 象 的 类 型 拟 定 调 用 哪 一 个 函 数。此 迟 绑 定 技 术 是 M FC的 类 的 继 承 的 精 髓。9.强 制 类 型 转 换。假 如 CFi s h 从 CA n im al派 生 而 来。则 可 以 将 鱼 的 对 象 转 换 为 CA nim
10、a l的 对 象,而 反 之 则 不 行。从 现 实 中 理 解 也 是 正 常 的,鱼 可 以 是 动 物,而 动 物 却 不 是 鱼。再 如 in t可 以 强 制 转 换 成 char型。而 反 之 则 犯 错。第 3课1.在 m ai n 或 W in Ma i n 之 前,全 局 变 量 已 经 被 分 派 内 存 并 初 始 化 了。2.在 M F C中 在 W i n M ain之 前 有 个 theA p p 全 局 变 量 先 被 构 造 并 被 初 始 化,而 由 于 子 类 构 造 函 数 执 行 前,其 父 类 的 构 造 函 数 先 被 执 行,所 以 CT e st
11、A pp的 父 类 CW inAPP的 构 造 函 数 先 执 行。产 生 了 theApp对 象 后,在 WinMain()中 的 指 针*p Thre a d 和*pA pp就 有 了 内 容。3.M F C大 体 流 程:C T e s tApp t h eApp;/构 造 全 局 对 象 W inM ain()(AfxWi n M a in();调 用 下 面 的 函 数)A f xWinMain()!pT h r e a d-In i tin s t anc e();/初 始 化 工 作 和 注 册 窗 口 类,窗 口 显 示 和 更 新 p T h read-R u n();/消
12、息 循 环)而 在 B O O L CT e s tApp:Ini t Inst a n c e()中 的 代 码 C S i ng 1 eDocTemplat e*pDocTemp 1 ate;pDoc T emp 1 ate=new CSing 1 e D ocTem p late(ID R _M A IN FR A M E,RUNT I ME_CLAS S(C TestD o c),RUNTIME_C L A S S(CM a in F ram e),/mai n SD I frame wind o wRUNTIME_C L A S S(C T est V iew);A d dDocT
13、e mpl a t e(p DocT e mpl a t e);完 毕 了 将 这 三 个 类 关 联 起 来 的 工 作。4.如 何 在 单 文 档 文 献 中 显 示 一 个 C Button的 对 象?在 CMainFrame:O n Creale()中 定 义 一 个 CB u t ton 的 对 象 bln;然 后 调 用 b t n.Create(维 新,W S _D IS A B L E D|WS_CHILD|W S.VISIBLE|BS_A U TO 3STA TE,C R e c t(0,0,3 0 0,1 00),/*G etP a r e n t(),*/this,12
14、3);注 意 点:(1).此 处 b t n 不 能 是 局 部 变 量,否 则 它 的 生 命 周 期 太 短,将 不 能 显 示。(2).在 e re a t e函 数 的 第 二 个 参 数 中 加 入 W S_V IS I B L E参 数 才 行。否 则 必 须 调 用 Sh o w Win d ow也 可 以 在 v i e w 的 O n C re a te消 息 响 应 函 数 中 加 入(3).CB u 11 o n 类 的 定 义 头 文 献 在 af x w i n.h中,而 st d a f x,h包 含 了 a f x win.h,所 以 可 以 直 接 使 用。由
15、于 M FC中 的 每 一 个 类 中 都 有#i n c 1 ude”stdafx.h”的 声 明。第 4 课 1.在 单 文 档 中 view挡 在 Mai n Fr a m e的 前 面。此 时 假 如 编 写 针 对 Ma i n F r a m e的 m ouseClic k 事 件,将 不 会 有 反 映。2.消 息 响 应 会 在 3 处 修 改 代 码,1处 是 在 头 文 献 中,/AFX_MSG(CD r a w Vie w)a f x _msg void 0 nLButto n D own(U I NT n Flag s,C P oin t poi n t);a仅 msg
16、 void OnLButtonUp(U I NT n F 1 a g s,CP o int p oin t);a fx_msg v oid OnMo u seM o v e(U I N T nFl a gs,CPoi n t point);/AFX_M S GD E C LAR E _MESS AGE_MA P()另 一 处 是 c pp 文 献 的 b egi n Mess a g eM ap 和 End Mess a g e Map 之 间,BEGIN_MESSAGE_MA P(CDr a wV i e w,CView)/AFX_MSG_M A P(CDrawV i ew)0 N_W M_
17、L B U T TONDOW N()ON_W M _LBUTT ONUP()ON WM MOUSEMOVE()/AFX_M SG_M AP/St a nda r d printi n g commandsON_COMMAND(I D _F ILE_PR I NT,CView:OnFileP r i n t)ON_C O M M A N D(ID _ F IL E _ P R I N T_DIR E CT,CVie w:On F ile P r i n t)0 N _C O M M A N D(ID _F IL E _P R IN T _P REVIEW,CView::0 nFilePrintP
18、rev i e w)END_MESS AGE_M AP()最 后 是 要 有 函 数 实 现 的 代 码。vo i d C Draw View::OnLB u t t onD o wn(UINT nF lags,CPoint point)(/TO D Add y o u r m e s sage hand 1 er c od e h e r e a n d/or call defaultm_ p tOrigi n=m _ p tO 1 d=p o int;m_ b D ra w=T RUE;C View:OnLB u ttonDown(n F 1 ags,point);)3.画 线:定 义 一
19、 个 成 员 变 量 保 存 m o u s eDown的 点 m_Po i n t1)A P I函 数 方 法 画 线 用 HDC2)用 C D C类 成 员 函 数 画 线。此 时 别 忘 掉 Releas e DC3)用 CC1 i entDC4)用 C W indow D C,用 它 甚 至 可 以 整 个 屏 幕 区 域 画 线。下 面 是 上 面 4 种 方 法 的 代 码/*HDC hdc;hdc=:GetDC(m_h W n d);Mov e T o Ex(hdc,m_ p tOrigin.x,m_ptOrig i n.y,N U L L);Li n e T o(h d c,p
20、 o i n t.x,p o in t.y);::R e I e aseDC(m _ h W n d,hd c);必 须 成 对 使 用。*/*CDC*pDC=Ge t DC();pD C-Move T o(m_ p t Or i gin);pDC Li n eT o(poin t);R e le a s e D C(p D C);必 须 成 对 使 用。*/CClie n t DC d c(th is);/*CClie n tDC dc(GetP a rent();d c.M o ve To(m_ p t O r ig i n);de.LineTo(p o i n t);此 处 不 需 要
21、Release D C,由 于 C C li e n tD C 会 自 动 释 放 DC*/CWin d owDC dc(t his);/C Windo w DC d c(GetPare n t();/*CWi n dowDC dc(G e t Des k topWindow();/此 时 可 以 在 整 个 屏 幕 上 画 线。de.Mo v e To(m_ p 10 rigin);de.Lin e T o(po i n t);*/*CPen pen(P S _ D O T,1,RGB(0,255,0);CC1 i entDC d c(th i s);CP e n*p 01 d Pen=d
22、c.S elect O b j e c t(&p en);d c.M o v eTo(m_ p(Origin);dc.L i neTo(p o int);de.Sei e c tO b j e c t(p 0 IdPe n);*/5)用 Bitma p 填 充 所 画 的 矩 形。CBitmap b i tma p;b i t map.Loa d Bitmap(ID B _ BITMAP1);C B r u sh b r u sh(&b i tmap);CClientDC de(t h i s);dc.FillR e ct(CRect(m_ p tOrigin,poi n t),&brush)
23、;/C B R U S H:FromH a n d l e 是 静 态 成 员 函 数,所 以 可 以 用 下 面 的 方 法 调 用。CBr u s h*p B r ush=CBru s h::F r om H a n die(H B RUSH)GetStoc k Obje c t(N U LL _ B R U S H);C Bru s h*p O 1 dBrus h=dc.S e l e c tObject(pBrus h);d c.Rect a n g le(C Rec t(m_ptOrig i n,point);d c.S ele c tOb j ec t(p 0 IdBru s h)
24、;m _b D r aw=FALS E;6)用 其 它 颜 色 画 线 C ClientDC d c(t hi s);C Pe n p e n(P S _ S O L ID,l,R G B(255,0,0);CP e n*pOldP e n二 dc.SelectObject(&pe n);选 中 红 色 画 笔 if(m_b D raw=TRU E)(d c.SetROP 2(R2_BLACK);设 立 绘 画 模 式 dc.MoveTo(m_p t Ori g in);/dc.LineTo(p o i n t);d c,Lin e To(m_ptOl d);/dc.MoveTo(m_ptOr
25、i g i n);dc.Mov e T o(m_ptO 1 d);dc.LineTo(point);/m_ptOrigin=po i nt;m_ptOld=point;)d c.S e 1 ectObje c t(pOldPe n);4.M FC中 隐 式 的 包 含 了 w i ndows.h。为 什 么?由 于 在 A FX V _W 32.h文 献 中:/This i s a p ar t o f t h e M i cro s o ft F oun d atio n Clas s es C+1 i b rary./Copy r ig h t(C)1 992 1 9 98 Micro s
26、 o ft C orpo r at i on/A l l right s r eser v e d.在 A F XWIN.h 中/Note:WINDOWS.H alre a d y i n c lu d ed fr o m AFXV_W32.H5.如 何 从 句 柄 获 得 对 象 的 指 针?答 FromH a ndle6.类 的 静 态 成 员 函 数 可 以 由 类 名 直 接 调 用,也 可 以 由 对 象 调 用。可 以 认 为 静 态 成 员 函 数 并 不 属 于 某 个 对 象,它 属 于 类 自 身。程 序 运 营 伊 始,即 使 没 有 实 例 化 类 的 对 象,静 态
27、成 员 函 数 和 静 态 成 员 变 量 已 然 有 其 内 存 空 间。静 态 成 员 函 数 不 能 访 问 非 静 态 成 员 变 量!静 态 成 员 变 量 必 须 在 类 的 外 部 初 始 化。当 然 假 如 并 不 打 算 用 到 静 态 成 员 变 量,此 时 你 可 以 不 初 始 它。7.理 解 代 码 区,数 据 区,堆,栈!请 见 下 面 的 简 介:对 于 一 个 进 程 的 内 存 空 间 而 言,可 以 在 逻 辑 上 提 成 3 个 部 份:代 码 区,静 态 数 据 区 和 动 态 数 据 区。动 态 数 据 区 一 般 就 是“堆 栈”。栈(s t a c
28、 k)”和“堆(h e a p)”是 两 种 不 同 的 动 态 数 据 区,栈 是 一 种 线 性 结 构,堆 是 一 种 链 式 结 构。进 程 的 每 个 线 程 都 有 私 有 的“栈”,所 以 每 个 线 程 虽 然 代 码 同 样,但 本 地 变 量 的 数 据 都 是 互 不 干 扰。一 个 堆 栈 可 以 通 过“基 地 址”和“栈 顶”地 址 来 描 述。全 局 变 量 和 静 态 变 量 分 派 在 静 态 数 据 区,本 地 变 量 分 派 在 动 态 数 据 区,即 堆 栈 中。程 序 通 过 堆 栈 的 基 地 址 和 偏 移 量 来 访 问 本 地 变 量。8.抽
29、空 看 看 李 维 的 悟 透 De 1 p h i 有 一 回,我 梦 见 自 己 变 成 了 计 算 机 时 空 世 界 里 的 一 个 对 象。随 着 计 算 机 世 界 的 不 断 发 展,我 们 这 些 对 象 已 经 不 再 象 原 始 时 代 的 对 象 那 样 仅 仅 为 了 获 得 生 存 的 资 源 而 不 断 的 忙 碌。我 们 的 思 想 空 前 活 跃,我 门 不 仅 思 考 我 们 为 什 么 要 在 计 算 机 世 界 里 生 存 和 运 营,并 且 还 大 胆 的 研 究 和 探 索 计 算 机 世 界 的 未 知 奥 秘。我 们 已 经 知 道 整 个 计 算
30、 机 世 界 都 是 由 字 节 这 一 基 本 粒 子 构 成,而 字 节 又 是 由 八 个 更 细 小 的 位 粒 子 构 成;我 们 还 知 道 物 质 不 灭 定 律,即 任 何 一 个 对 象 的 灭 亡,只 意 味 着 对 象 结 构 的 解 体,并 不 会 减 少 计 算 机 世 界 中 的 任 何 字 节 或 位 粒 子,而 着 这 些物 质 又 也 许 成 为 别 的 对 象 的 一 部 分;甚 至,我 们 还 知 道 我 们 所 处 的 世 界 是 一 个 球 体,由 于,在 越 过 经 度$F F F F F F F F 又 回 到 了 原 点$0 0 0 0 0 0
31、0 0的 位 置。著 名 的 物 理 学 家 对 象 牛 顿 早 就 发 现 各 种 对 象 之 间 存 在-种 普 遍 的 联 系,并 且 在 对 象 的 运 动 速 度 与 对 象 大 小 的 关 系 方 面 提 出 了 著 名 的 理 论-牛 顿 力 学。可 是,后 来 牛 顿 这 个 对 象 却 一 直 搞 不 懂 到 底 是 什 么 力 量 在 无 形 地 推 动 各 种 对 象 的 运 动。因 此,他 认 为 一 定 是 发 明 整 个 计 算 机 世 界 的 上 帝 在 推 动 各 种 对 象 的 运 动。后 来 他 成 了 上 帝 最 虔 诚 的 信 徒。在 牛 顿 对 象 死
32、 后 不 久,我 们 的 计 算 机 世 界 又 诞 生 了 一 个 更 伟 大 的 对 象。他 基 于 先 有 代 码 的 执 行 才 有 执 行 的 结 果 这 一 基 本 的 因 果 论,提 出 了 进 程 运 动 的 时 空 是 相 对 的 这 一 伟 大 理 论。他 认 为,在 一 个 运 动 中 进 程 空 间 中 看 另 一 个 运 动 中 的 进 程 空 间,时 间 和 空 间 都 不 是 绝 对 的,空 间 会 弯 曲。并 且,任 何 对 象 的 运 动 速 度 绝 对 不 也 许 超 过 C P U 的 速 度,C P U 速 度 就 是 我 们 计 算 机 世 界 里 的
33、 光 速。这 位 伟 大 的 科 学 对 象 的 名 字 就 叫 爱 因 斯 坦,他 的 相 对 论 在 一 开 始 是 不 被 对 象 们 理 解 的,可 是 后 来 的 科 学 探 索 都 证 明 了 这 一 理 论 的 对 的 性。他 提 出 的 代 码 能 量 和 数 据 物 质 可 以 互 相 转 换 的 理 论,也 后 来 制 造 的 大 规 模 毁 灭 性 病 毒 核 武 器 中 得 到 验 证。在 梦 的 世 界 里,我 快 乐 极 了。我 一 会 儿 变 一 变 我 的 属 性,一 会 儿 又 动 动 我 的 方 法,一 会 儿 感 受 一 下 外 来 的 事 件。没 错,我
34、 的 确 就 是 一 个 实 实 在 在 的 对 象!过 了 一 会 我 忽 然 明 白,我 本 来 就 是 一 个 对 象,只 是 这 个 对 象 在 梦 中 变 成 了 现 实 世 界 的 我 哈 哈!a lign=righ t col o r=#0 000 6 6 此 贴 子 已 经 被 作 者 于 202 3-3-1 20:0 3:14编 辑 过/color/align资 料 发 消 息 回 复 引 用 推 荐 收 藏 顶 楼 虎 非 龙 昵 称:虎 非 龙 专 家 等 级:学 员 专 家 分:5 0 0可 用 分 等 级:佃 户 精 华:0帖 子 数:370结 帖 率:1 00%注
35、册 时 间:2023-07-1 1 2 3:2 8:00发 表 于 2023-03-0 3 2 3:0 1:00 第 5 楼 第 5 课 l.CWnd:Cr e a teS o li d C a ret 创 建 插 入 符,ShowC a r e t()显 示 插 入 符。G etTextMetric s(),获 得 当 前 字 体 的 一 些 信 息。C W n d::C r e a teC ar e t()创 建 图 象 插 入 符 bitmap.LoadB i tmap(IDB_ B IT M A P 1);/此 处 的 b i t map 为 成 员 变 量!!C r ea t e C
36、 a ret(&bi t map);Show Car e t();TEXTMETRIC tm;字 体 结 构 体 dc.GetT e xtM e t r ic s(&t m);/m_p t 0 r igi n.y+=tm.tmH e i g h t;获 得 字 体 高 度。2.VC 中 CS t r i ng:L o a dS t ri n g(ID 号),比 较 方 便。3.途 径 层 的 概 念:有 两 种 方 法 创 建 途 径 层:(1)pDC-Begi n Pa t h();p DC-Rectan g 1 e(50,50,50+s z.cx,50+s z.cy);pDC EndP a
37、 th();p D C-SelectClipPath(R G N _ D I FF);(2)CSize s z=pDC-GetTex t E x t ent(s t r);CRgn rn;r n.C r ea t e Re c t R g n(0,5 O,sz.cx,s z.c y);pD C-Sele c tC 1 ip R g n(&m,RGN_D I FF);途 径 层 有 什 么 作 用?可 以 保 护 我 们 先 前 的 文 本 或 者 图 像 不 被 后 来 画 的 覆 盖。4.在 V iew上 输 入 文 字 的 环 节。C Font fon t;/创 建 字 体 对 象 fon
38、t.Cre a t e P o intFont(30 0,华 文 行 楷,N U L L);设 立 CFo n t*pOld F ont=d c.Sele c tObj e ct(&font);将 字 体 选 择 到 DC 中 TEXTMETR I C t m;/创 建 字 体 信 息 对 象 d c.GetTex t Me t rics(&tm);/获 得 当 前 字 体 信 息 i f(0 x0d=nChar)/解 决 回 车 键(m_st r L i ne.Em p ty();m_ p t Origi n.y+=tm.tm H e ight;)else i f(0 x08=nChar)/
39、解 决 退 格 键 C O LO R R EFclr=d c.S e t TextC o 1 or(d c.Get B kColo r();d c.Te x tOut(m_ptO r igin.x,m_ptOr i gi n.y,m_ s trLine);m_strLi n e=m_strL i ne.L e f t(m_ s trLi n e.Ge t Length()1);dc.SetTextColor(cl r);e Isem_s t rL i ne+=nChar;)C S ize sz=d c.Ge t Text E xtent(m_str L in e);CPo i n t p t;
40、解 决 光 标 的 位 置 p t.x=m_pt O r igi n.x+s z,cx;pt.y=m _ p tOrigi n.y;S e t Care t Pos(pt);d c.Tex t Ou t(m _ptO rig i n.x,m_p t Ori g i n.y,m_st r L i n e);输 出 字 体 dc.S e lec tOb j ec t(pOl d F o n t);将 原 先 的 字 体 选 择 回 去。5.模 拟 卡 啦 O K变 色 的 环 节。(1)设 立 定 期 器(2)在 定 期 器 中 加 入 如 下 代 码/DEL m _nW idth+=5,此 为
41、v i e w 的 成 员 变 量,初 始 值 为 0/D E L/D E L/D E L C ClientD C dc(th i s);/D E L TEXTMETRIC tm;/DEL d c.G e tT e x t Me t rics(&tm);/DEL CRect r ect;/DEL rec t.lef t=0;/DEL rect.t o p=2 0 0;/D E L re c t.r ight=m_n W i dlh;/D EL rec t.bo t t o m=r e ct.top+tm.t mHeig h t;此 长 方 形 的 长 度 随 着 定 期 器 的 触 发,逐 渐
42、 增 大/D EL/D E L d c.S etT e xtColor(RGB(2 5 5,0,0);/D E L C Stri n g s t r;/D E L str.L o a d S t r i ng(ID S_W EIX I N);/D E L d c.DrawText(s t r,rect,DT_L E FT);此 函 数 的 作 用 是 将 字 符 串 输 出 到 长 方 形 中,但 假 如 字 符 串 的 长 度 超 过 长 方 形 的 长 度,多 余 的 字 符 将 被 截 断/D E L/DE L re c t.top=1 5 0;/D E L rect.bottom=re
43、ct.top+t m.tm H e i g h t;/D E L d c.DrawTe x t(s tr,r e ct,DT_RIGH T);/DEL/D E L C S ize s z=dc.G e tText E x te n t(str);获 得 字 符 串 的 长 度/DEL i f(m _nW i dth s z.ex)当 长 方 形 的 长 度 大 于 字 符 串 的 长 度 后,将 其 重 新 归 0/D EL/D E L m-nWid t h=0;/DEL dc.S e tT e xtColo r(RGB(0,25 5,0);/D E L de.Text 0 u t(0,200
44、,str);/D E L/DEL/D E L CV i ew:On T im e r(n I DEv e nt);6.S e tT im e r也 可 以 用 回 调 函 数 来 操 作,但 并 不 方 便。以 下 是 环 节(1)在 V i e w fi m _h Wnd),udd f af,we i xin n,0);CM a inFr a me*pMai n=(CMainFr a m e*)AfxGetApp()-m_ pMa i nWnd;获 得 M ai nFr a m e 的 指 针 CT e xt View*pView=(CText View*)p M a inGetA c ti
45、 v eV i ew();获 得 view 的 指 针 CC 1 ie n tD C dc(p View);构 造 DCdc.Tex t Out(3 3 3,222,hello world);/我 们 可 以 看 出,使 用 回 调 函 数 时 要 获 得 窗 口 或 者 A PP的 指 针,给 我 们 的 操 作 带 来 麻 烦。并 不 方 便。第 6课 1.当 对 某 菜 单 添 加 消 息 响 应 函 数 时,4 个 类 的 消 息 响 应 优 先 顺 序 分 别 是:1.View;2.CDOC;3.CM a inFrame.4.CWinA PP.为 什 么?请 参 阅 进 一 步 浅
46、出 2.消 息 分 类:a;标 准 消 息(以 W M _开 头 的 消 息,但 不 涉 及 ON_COM M AND)收 命 令 消 息 0N_COMM A N D(IDM_PHONE 1,O n P h o n e l),菜 单 和 工 具 栏 的 消 息。c.通 告 消 息:按 钮,列 表 框 发 出 的 消 息。C C m d T a r g e t只 能 接 受 命 令 消 息。而 从 CCmdTarget派 生 的 CW n d 可 以 接 受 命 令 消 息,也 可 以 接 受 标 准 消 息。3.拟 定 菜 单 的 索 引 号,注 意 从 0 开 始,分 隔 符 也 算 数。什
47、 么 叫 弹 出 菜 单(Popup M e n u)?一 个 子 菜 单 只 能 有 一 个 缺 省 菜 单。Ge t Menu()G etSubM enu(O)-Se t D e f au 1tltem(5,T R U E);s t r.Format(x=%d,y=%d”,G e tS y stemMetrics(S M _CXMENUCHECK),Get S yst e mM e t ric s(SM_CYMEN U C H E C K);获 得 系 统 的 菜 单 的 位 图 的 大 小。/*S etM e nu(NULL);/移 除 菜 单 C M e n u menu;menu.L
48、oadMen u(IDR_MAINFRAME);SetMenu(&m e n u);menu.Det a c h();*/增 长 菜 单,此 处 detach。,假 如 是 局 部 变 量。4.v o id CMain F r a me:O n Upd a teEdi t Cut(C C mdUI*pCmdUI)i f(2=p CmdUI-m_nI n d e x)pCmdUI-E n a b le();/当 此 菜 单 显 示 时,设 为 可 用。)5.右 键 弹 出 菜 单 功 能 的 实 现 方 法 有 两 个:a.P r oje c t-A dd t o P r o j ect-c o
49、 m ponent a nd cont r o 1 s-文 献 夹 VC component s P o p up Me n u 0 Kb.用 T r ack Pop u p M e n u()实 现。CMen u menu;m e nu.LoadMenu(I DR_ M ENU!);CM e nu*pPopup=men u.G e tS u bMen u(0);Cli e n tToScreen(&poi n t);pP opu p-Trac k Po p u pM enu(TPM _LEFT AL I GN I T PM _RIGH T BU T T 0 N,p o i nt.x,poin
50、t.y,G e t P a r e n t O);6.动 态 创 建 菜 单 的 方 法:CM e nu menu;m e n u.Cr e a t e P o p upMenu();/GetM e nu()A p pendMenu(MF_ P 0 PUP,(U INT)menu.m_ hMe n u,W i nSun”);GetM e n u()-InsertM e n u(2,M F_ B YPOSIT ION|M F _PO PU R(U IN T)menu.m_h Men u,nWi n S u n);men u.App e ndMe n u(MF_STR I NGJDM_H E L