一个基础的MFC问题? 为什么MFC生成的类中,一般把constructor声明为protected,descturctor声明为public,消息映射机制中的函数也声明为protected? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 把constructor搞成protected的类,一般都是由application framework(=MFC实现的编程框架)使用动态创建的机制创建其实例(对象),这样可以防止你自己去创建它的实例。把消息处理函数也搞成protected,是因为application framework使用消息映射机制调用这些函数,这样当然也是防止你直接去调用这些函数。 但为什么app framework就可以使用protected成员函数呢?这似乎不符合protected的本义。为什么他的析构函数又被声明为public呢? 派生类和友元都可以调用 protected member ,MFC 中这些 protected member 大部分是被类的其他函数调用的,比如 constructor 是被 DECLARE_DYNCREATE 宏定义的 static CObject* PASCAL CreateObject(); 函数调用的。destructor 定义为 protected 的话,在其他类和函数中 delete pObject; 就不可能编译通过了。 动态创建机制=运行时创建,MFC关键技术之一:简单描述一下:动态创建声名宏(DECLARE_DYNCREATE)会给类添加一组静态成员和变量(如: static CObject* PASCAL CreateObject();),app framework通过这些东东直接得到这个类的constructor的函数指针,然后通过这个函数指针调用constructor完成动态创建,而不是直接调用被保护的constructor。 使用Spy++如何探测Active敏感窗口? UpdateData的问题 想请教各位高人如何改Dialog的背景 在winlogon桌面可以用ShellExecute打开一个文件,并在default桌面显示出界面来吗? 停用启用usb设备的问题? 我想通过WebBrowser控件打开一个页面,如果得到像IE里面的“查看源文件”的文本呢? 奇怪的问题,答不上来也没关系,ActiveX应用 请教,我在excel里面设计好的表格,在vc里面可以调用并填上数据打印出来吗?具体应该怎么设计 CDC绘图,会移动 VC++调试问题 rockyluo 急:各位高手快出来!!!
简单描述一下:
动态创建声名宏(DECLARE_DYNCREATE)会给类添加一组静态成员和变量(如: static CObject* PASCAL CreateObject();),app framework通过这些东东直接得到这个类的constructor的函数指针,然后通过这个函数指针调用constructor完成动态创建,而不是直接调用被保护的constructor。