📄 errata-dissecting-mfc-2e.htm
字号:
<TD vAlign=top width=206><FONT
size=3>00000066</FONT><!--mstheme--></FONT></TD>
<TD vAlign=top width=406><FONT face=细明体 size=3>第一个圆形的中心点</FONT><FONT
size=3> Y <FONT face=细明体>座标</FONT></FONT><!--mstheme--></FONT></TD></TR>
<TR>
<TD vAlign=top width=206><FONT
size=3>00000077</FONT><!--mstheme--></FONT></TD>
<TD vAlign=top width=406><FONT face=细明体 size=3>第一个圆形的半径</FONT><!--mstheme--></FONT></TD></TR>
<TR>
<TD vAlign=top width=206 bgColor=#ffffff><FONT size=3>8001</FONT><!--mstheme--></FONT></TD>
<TD vAlign=top width=406 bgColor=#ffffff><FONT face=细明体
size=3>这是</FONT><FONT size=3> (<I>wOldClassTag</I> |
<I>nClassIndex</I>) <FONT face=细明体>的组合结果,表示接下来的物件使用索引为</FONT> 1
<FONT face=细明体>的旧类别。</FONT></FONT><!--mstheme--></FONT></TD></TR>
<TR>
<TD vAlign=top width=206><FONT
size=3>0002</FONT><!--mstheme--></FONT></TD>
<TD vAlign=top width=406><FONT face=细明体 size=3>第二条线条的宽度</FONT><!--mstheme--></FONT></TD></TR>
<TR>
<TD vAlign=top width=206><FONT
size=3>0002</FONT><!--mstheme--></FONT></TD>
<TD vAlign=top width=406><FONT face=细明体
size=3>第二条线条的点阵列大小</FONT><FONT size=3> (<FONT
face=细明体>点数</FONT>)</FONT><!--mstheme--></FONT></TD></TR>
<TR>
<TD vAlign=top width=206><FONT size=3>00000066,00000031</FONT><!--mstheme--></FONT></TD>
<TD vAlign=top width=406><FONT face=细明体 size=3>第二条线条的第一个点座标</FONT><!--mstheme--></FONT></TD></TR>
<TR>
<TD vAlign=top width=206><FONT size=3>00000066,00000031</FONT><!--mstheme--></FONT></TD>
<TD vAlign=top width=406><FONT face=细明体 size=3>第二条线条的第二个点座标</FONT><!--mstheme--></FONT></TD></TR>
<TR>
<TD vAlign=top width=206 bgColor=#ffffff><FONT size=3>8003</FONT><!--mstheme--></FONT></TD>
<TD vAlign=top width=406 bgColor=#ffffff><FONT face=细明体
size=3>这是</FONT><FONT size=3> (<I>wOldClassTag</I> |
<I>nClassIndex</I>) <FONT face=细明体>的组合结果,表示接下来的物件使用索引为</FONT> 3
<FONT face=细明体>的旧类别。</FONT></FONT><!--mstheme--></FONT></TD></TR>
<TR>
<TD vAlign=top width=206><FONT
size=3>00000011</FONT><!--mstheme--></FONT></TD>
<TD vAlign=top width=406><FONT face=细明体 size=3>第<FONT
color=#ff0000><STRONG>二</STRONG></FONT>个四方形的左</FONT><!--mstheme--></FONT></TD></TR>
<TR>
<TD vAlign=top width=206><FONT
size=3>00000022</FONT><!--mstheme--></FONT></TD>
<TD vAlign=top width=406><FONT face=细明体 size=3>第<FONT
color=#ff0000><STRONG>二</STRONG></FONT>个四方形的上</FONT><!--mstheme--></FONT></TD></TR>
<TR>
<TD vAlign=top width=206><FONT
size=3>00000033</FONT><!--mstheme--></FONT></TD>
<TD vAlign=top width=406><FONT face=细明体 size=3>第<FONT
color=#ff0000><STRONG>二</STRONG></FONT>个四方形的右</FONT><!--mstheme--></FONT></TD></TR>
<TR>
<TD vAlign=top width=206><FONT
size=3>00000044</FONT><!--mstheme--></FONT></TD>
<TD vAlign=top width=406><FONT face=细明体 size=3>第<FONT
color=#ff0000><STRONG>二</STRONG></FONT>个四方形的下</FONT><!--mstheme--></FONT></TD></TR>
<TR>
<TD vAlign=top width=206 bgColor=#ffffff><FONT size=3>8005</FONT><!--mstheme--></FONT></TD>
<TD vAlign=top width=406 bgColor=#ffffff><FONT face=细明体
size=3>这是</FONT><FONT size=3> (<I>wOldClassTag</I> |
<I>nClassIndex</I>) <FONT face=细明体>的组合结果,表示接下来的物件使用索引为</FONT> 5
<FONT face=细明体>的旧类别。</FONT></FONT><!--mstheme--></FONT></TD></TR>
<TR>
<TD vAlign=top width=206><FONT
size=3>00000055</FONT><!--mstheme--></FONT></TD>
<TD vAlign=top width=406><FONT face=细明体 size=3>第二个圆形的中心点</FONT><FONT
size=3> X <FONT face=细明体>座标</FONT></FONT><!--mstheme--></FONT></TD></TR>
<TR>
<TD vAlign=top width=206><FONT
size=3>00000066</FONT><!--mstheme--></FONT></TD>
<TD vAlign=top width=406><FONT face=细明体 size=3>第二个圆形的中心点</FONT><FONT
size=3> Y <FONT face=细明体>座标</FONT></FONT><!--mstheme--></FONT></TD></TR>
<TR>
<TD vAlign=top width=206><FONT
size=3>00000077</FONT><!--mstheme--></FONT></TD>
<TD vAlign=top width=406><FONT face=细明体 size=3>第二个圆形的半径</FONT><!--mstheme--></FONT></TD></TR></TBODY></TABLE>
<P><BR><BR><BR><STRONG><FONT color=#ff0000>★ <深入浅出 MFC> 二版3刷 ★
出版日期:1997/10</FONT></STRONG><BR><BR>本刷与2刷内容完全相同,唯因出版过程误失,漏植一张 <FONT
color=#0000ff>MFC 全图</FONT>。<BR>以下为发现後之当时公告(<FONT
color=#0000ff>永远有效</FONT>)。<BR><BR><FONT
color=#0000ff>各位亲爱的读友:<BR><BR>我是侯俊杰。最近我开一个课程,使用 <深入浅出 MFC>
2/e<BR>做教材(ISBN 957-22-2518-9,松岗书号
2101629),<BR>发现本书第3刷缺少一张跨页彩色图,此图应该出现在封面<BR>之後的扉页位置。第1刷和第2刷均有此图,独第3刷漏失。<BR><BR>此图为
MFC 4.21
类别阶层架构图,至为重要。我个人<BR>以及松岗公司对此装订上的疏失深感懊恼与抱歉。松岗<BR>公司为维护读者权益,决定加印此图,免费提供给<BR><深入浅出
MFC> 二版3刷之读者索取。索取方式有三:<BR><BR>1. 亲至松岗各门市索取。<BR>2.
进入松岗网页(www.unalis.com.tw),对客服部留言函索。<BR>3. FAX
至松岗客服部(02-23257956)函索此图。<BR><BR>以 2 或 3
方式索取者,请留下您的邮寄地址;松岗将以<BR>邮递方式将图寄给您。您不必出示任何读者证明。<BR><BR>因此疏失而为您带来麻烦,我与松岗公司谨至最大的歉意。<BR>虽然疏失的发现时机有点迟,我们愿尽最大的努力弭补。<BR>同时也请您将此讯息告诉您的朋友。<BR><BR>我与松岗公司均力图在每一次可能的机会中,修正内容误失,<BR>力求让此书更美好。我要藉此机会感谢每一位写信给我,<BR>向我指正或给我意见的读友。<BR><BR>--
侯俊杰 1998.05.16</FONT><BR><BR><BR><STRONG><FONT color=#ff0000>★ <深入浅出
MFC> 二版4刷 ★
出版日期:1998/??</FONT></STRONG><BR><BR>本刷内容与3刷完全相同。<BR><BR><BR><FONT
color=#ff0000><STRONG>★ <深入浅出 MFC> 二版五刷 ★
出版日期:1998/09<BR></STRONG></FONT><BR>●新增<BR><BR>读者来函 i~xvi(16 页)<BR>二版五刷感言
4 页<BR><BR>●模糊不清 重制(括号内为 chap1
之前的页次):<BR><BR>(11,17,18,19,26,28,33,)<BR>1,35,53,68,81,83,84,101,119,121,137,147,149,<BR>269,293,296,641,771,779,784,795,834,839<BR><BR>●内容误失:<BR><BR>页次:p9
方块内 L5<BR>原文: eneric.res : generic.rc generic.h<BR>更正:<FONT
color=#0000ff>generic.res</FONT> : generic.rc generic.h<BR><BR>页次:p16 图1-3
左下 L-6<BR>原文:CW_USEDEFAULT, // hieght<BR>更正:CW_USEDEFAULT, // <FONT
color=#0000ff>height</FONT><BR><BR>页次:p27 中段程式码 L2 片段<BR>原文:if
(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)<BR>更正:if
(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE) <FONT
color=#0000ff>{</FONT><BR><BR>页次:p58<BR>原文:#0029<BR>更正:#0029 <FONT
color=#0000ff>{</FONT><BR><BR>页次:p65 中段程式码片段<BR>原文:void setComm(float
comm);<BR>更正:void <FONT color=#0000ff>setCommission</FONT>(float
comm);<BR><BR>页次:p74 L8<BR>原文:踪合<BR>更正:<FONT
color=#0000ff>综</FONT>合<BR><BR>页次:p75 第四段 L3<BR>原文:CYaohoo<BR>更正:<FONT
color=#0000ff>CYahoo</FONT><BR><BR>页次:p94 L-1<BR>原文:vitual<BR>更正:<FONT
color=#0000ff>virtual</FONT><BR><BR>页次:p132 Frame3 范例程式 之前
L-3<BR>原文:Cobject<BR>更正:C<FONT color=#0000ff>O</FONT>bject<BR><BR>页次:p262
L2<BR>原文:预设市关闭状态<BR>更正:预设<FONT color=#0000ff>是</FONT>关闭状态<BR><BR>页次:p408
程式码片段 L5<BR>原文:filename = dlg.GetPathNMe();<BR>更正:filename = <FONT
color=#0000ff>opendlg</FONT>.GetPathNMe();<BR><BR>页次:p408
程式码片段下第一行<BR>原文:opdndlg 构建式的第一个叁数被指定为...<BR>更正:<FONT
color=#0000ff>opendlg</FONT> 构建式的第一个叁数被指定为...<BR><BR>页次:p493 L-4
尾<BR>原文:Document/View/Frmae<BR>更正:Document/View/<FONT
color=#0000ff>Frame</FONT><BR><BR>页次:p535 L-6<BR>原文:包容 DYNCREATION
巨集,并且在...<BR>更正:包容 <FONT color=#0000ff>DYNCREATE</FONT>
巨集,并且在...<BR><BR>页次:p541 L-1,L-3<BR>原文:图10-a<BR>更正:图<FONT
color=#0000ff>8-10a</FONT><BR><BR><BR><BR><STRONG><FONT color=#ff0000>★
<深入浅出 MFC> 二版六刷 ★ 出版日期:1999/01</FONT></STRONG><BR><BR>页次:p72
L12<BR>原文:pEmp = &aBoss;<BR>更正:pEmp = &<FONT
color=#0000ff>aManager</FONT>;<BR><BR>◆以下 <FONT
color=#0000ff>p85~p88</FONT> 的错误主要是 <FONT
color=#0000ff>SavingAccount</FONT> 笔误为 SavingAccout。<BR><BR>页次:p85
L-11<BR>原文:class SavingAccout<BR>更正:class SavingAccou<FONT
color=#0000ff>n</FONT>t<BR><BR>页次:p86 L3<BR>原文:class
SavingAccout<BR>更正:class SavingAccou<FONT
color=#0000ff>n</FONT>t<BR><BR>页次:p86 中段程式码<BR>原文:double
SavingAccout::m_rate = 0.0075;<BR>更正:double SavingAccou<FONT
color=#0000ff>n</FONT>t::m_rate = 0.0075;<BR><BR>页次:p86
L-7<BR>原文:...是在这时候(而不是在类别宣告中)才宣告出来的。<BR>更正:...是在这时候(而不是在类别宣告中)才<FONT
color=#0000ff>定义</FONT>出来的。<BR><BR>页次:p86
L-2<BR>原文:...也有一个。第2章的「RTTI...<BR>更正:...也有一个。第<FONT
color=#0000ff>3</FONT>章的「RTTI...<BR><BR>页次:p87
L5<BR>原文:SavingAccout::m_rate = 0.0075;<BR>更正:SavingAccou<FONT
color=#0000ff>n</FONT>t::m_rate = 0.0075; <FONT color=#0000ff>// 欲此行成立,需把
m_rate 改为 public</FONT><BR><BR>页次:p87 L11<BR>原文:SavingAccout
myAccount;<BR>更正:SavingAccou<FONT color=#0000ff>n</FONT>t
myAccount;<BR><BR>页次:p87 最後一段文字(一整段)<BR>原文:既然 static
成员变数是超乎物件之外存在,如果...<BR>更正:<FONT color=#0000ff>只要 access level
允许,任何函式(包括全域函式或成员函式,<BR>static 或 non-static)都可以存取 static
成员变数。但如果你希望在<BR>产生任何 object 之前就存取其 class 的 private static
成员变数,<BR>则必须设计出一个 static 成员函式(例如以下的 setRate):</FONT><BR><BR>页次:p87
L-14<BR>原文:class SavingAccout<BR>更正:class SavingAccou<FONT
color=#0000ff>n</FONT>t<BR><BR>页次:p87 L-3<BR>原文:}<BR>更正:}<FONT
color=#0000ff>;</FONT><BR><BR>页次:p87 L-2<BR>原文:double SavingAccout::m_rate
= 0.0075;<BR>更正:double SavingAccou<FONT color=#0000ff>n</FONT>t::m_rate =
0.0075;<BR><BR>页次:p88 L2<BR>原文:SavingAccout
myAccount;<BR>更正:SavingAccou<FONT color=#0000ff>n</FONT>t
myAccount;<BR><BR>页次:p88
L4<BR>原文:SavingAccout::setRate(0.0074);<BR>更正:SavingAccou<FONT
color=#0000ff>n</FONT>t::setRate(0.0074);<BR><BR><BR><A name=p173~p208>◆以下
<FONT color=#0000ff>p173~p208</FONT> 的错误主要是因为误把 <FONT
color=#0000ff>"afxmsg_.h"</FONT> 写为
<afxmsg_.h><BR><BR>感谢台北萧祖台先生</A><BR><BR>说明:<BR><BR>在 <深入浅出
MFC> 1/e, chap3 中,我曾以 frame7 和 frame8 两个<BR>小小的 DOS-like 程式模拟 MFC 的
msggage mapping 和 command routing。<BR>这程式在当时(VC4.0)是好的,但当我撰写 <深入浅出
MFC> 2/e,这两个程式<BR>过不了 VC4.2 和 VC5.0 的关口。当时一下子找不出
bug,自忖<BR>这只是份模拟,设计架构和模拟结果也都交待很清楚了,只是移植有问题,<BR>所以也就打了个马虎眼,附上的仍是 VC40
所编译的可执行档。<BR><BR>原因出在,我为了模拟 msggage mapping 和 command routing,必须设计<BR>一些
structures 以及 macros,那是从 MFC source afxmsg_.h 中学来的。<BR>而为了与 MFC 尽量雷同,<FONT
color=#0000ff>我连我自己的档名也叫做 afxmsg_.h</FONT>。<BR><BR><FONT
color=#0000ff>坏就坏在应该 #include "afxmsg_.h" 的地方,我却写成 #include
<afxmsg_.h></FONT>。<BR>这在 VC40(MFC40)阴错阳差地 OK 了,但在 VC42+(MFC42)中则因为
MFC 内部<BR>的变化,导至 error msg C2102 : & on constant.<BR><BR>所以,只要把书中的
#include <afxmsg_.h> 改为 #include "afxmsg_.h",<BR>就 OK 了。<FONT
color=#0000ff>但又阴错阳差地</FONT>,由於我曾在程式中使用 CN_COMMAND 这个常数,<BR>却忘记在自己的
afxmsg_.h 中定义,所以一者是加上这个定义(随便定义为<BR>什麽常数都行,因为其实它在此范例程式中没有实际用途),一者是<FONT
color=#0000ff>把程式中<BR>的 CN_COMMAND 全改为
0。</FONT><BR><BR>整理如下:<BR><BR>页次:p173 中段<BR>原文: { WM_COMMAND, CN_COMMAND,
(WORD)id, (WORD)id, AfxSig_vv, (AFX_PMSG)memberFxn },<BR>更正: { WM_COMMAND,
<STRONG><FONT color=#0000ff>0</FONT></STRONG>, (WORD)id, (WORD)id,
AfxSig_vv, (AFX_PMSG)memberFxn },<BR><BR>页次:p174 L-4<BR>原文: { WM_COMMAND,
CN_COMMAND, (WORD)122, (WORD)122, 1, (AFX_PMSG)0 },<BR>更正: { WM_COMMAND,
<STRONG><FONT color=#0000ff>0</FONT></STRONG>, (WORD)122, (WORD)122, 1,
(AFX_PMSG)0 },<BR><BR>页次:p175 上图<BR>更正: 图中的 CN_COMMAND 改为 <STRONG><FONT
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -