关于"深入浅出MFC"的几个问题

我重读<<深入浅出MFC>>,发现几个问题。以下页码以电子版为准。
1. part4 P536
    CArchive& AFXAPI operator>>(CArchive& ar, CStroke* &pOb)
    { pOb = (CStroke*) ar.ReadObject(RUNTIME_CLASS(CStroke));
    return ar; }
    好,你看到了,為什麼只改寫operator>>,而沒有改寫operator<<?原因是WriteObject 並
    不需要CRuntimeClass 資訊,但ReadObject 需要,因為在讀完檔案後還要做動態生成
    的動作。
我改写了DECLARE_SERIAL / IMPLEMENT_SERIAL宏,去掉了operator<<,几个例子都没有问题。
似乎overload后的operator>>根本不会被调用,因为函数重载依据是静态类型,而MFC作为一个
框架根本不可能事先知道用户定义的类.

2. part3 P387
    視窗類別名稱怎麼會變成像Afx:b:14ae:6:3e8f 這副奇怪模樣呢?原來是Application
    Framework 玩了一些把戲,它把這些視窗類別名稱轉換為Afx:x:y:z:w 的型式,成為獨一
    無二的視窗類別名稱:
    x: 視窗風格(window style)的hex 值
    y: 視窗滑鼠游標的hex 值
    z: 視窗背景顏色的hex 值
    w: 視窗圖示(icon)的hex 值

这里得到的窗口类名称应该是类似"Afx:400000:8:10011:0:ca40565"这样的,我用的VC++6.0,
而根据书上的图片也应该是这样的.所以格式为Afx:instance_handle:x:y:z:w,另外我觉得用独一无二
似乎不太合适.instance_handle都是40000,y:z:w的值也经常是相同的.所以只要窗口风格相同,则窗口
类名称就经常重复.另外很重要的一点是,转换窗口名称是为了注册完全不同的窗口类,在书中附例
Scribble 4中用Spy++可以看到,既有AfxMDIFrame42d类的窗口,也有Afx:400000:8:10011:0:ca40565类的
窗口,如果如作者所说只是玩个小把戏换下窗口类名称,那么应该告诉读者为什么这样做

以上只是我所想的,难免有不够恰当之处,欢迎大家一起讨论. 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值