VC6里面如何根据字符串"CRect",自动得到一个CRect类的实例? 不知道VC里面有没有这种根据给定类型的字符串比如:"CRect","CButton"……自动生成该类型实例的方法? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 这个应该就是所谓的动态创建吧,看看候sir的深入嵌入mfc中的第三章,或许会有帮助 #0018 CObject* CRuntimeClass::CreateObject()#0019 {#0020 if (m_pfnCreateObject == NULL)#0021 {#0022 TRACE1("Error: Trying to create object which is not "#0023 "DECLARE_DYNCREATE \nor DECLARE_SERIAL: %hs.\n",#0024 m_lpszClassName);#0025 return NULL;#0026 }#0027#0028 CObject* pObject = NULL;#0029 pObject = (*m_pfnCreateObject)();#0030#0031 return pObject;#0032 }#0033#0034 CRuntimeClass* PASCAL CRuntimeClass::Load()#0035 {#0036 char szClassName[64];#0037 CRuntimeClass* pClass;#0038#0039 // JJHOU : instead of Load from file, we Load from cin.#0040 cout << "enter a class name... ";#0041 cin >> szClassName;#0042#0043 for (pClass = pFirstClass; pClass != NULL; pClass = pClass->m_pNextClass)#0044 {#0045 if (strcmp(szClassName, pClass->m_lpszClassName) == 0)#0046 return pClass;#0047 }#0048#0049 TRACE1("Error: Class not found: %s \n", szClassName);#0050 return NULL; // not found#0051 } 好像听说MFC就是这么来的,高!看看http://hg993.51.net/crazylb/book/runtimeclass/runtimeclass.htm awnucel:#0043 for (pClass = pFirstClass; pClass != NULL; pClass = pClass->m_pNextClass)中pFirstClass是什么?还有CRuntimeClass里面好像没有m_pNextClass的成员 侯老的文章只是讲了原理,但是怎么用呢?CRuntimeClass没有firstClass这个静态变量怎么开始遍历? 动态创建的类必须从CObject继承吧,CRect就不行了,除非你自己实现一套机制 估计需要自己实现一个类似的。一般的做法是设计一个struct,其中包括一个字符串和一个函数指针,然后用宏声明出一个这样的sturct的数组,每当要创建对象时,就遍历这个数组,用字符串进行比较,如果相同就调用那个函数指针来创建对象。说起来容易做起来还需要一番摸索,如果想要个简单的,可以参考MFC的MESSAGE_MAP的机制。你做一个全局的那种东西就行了。 CRect 不是继承自CObject所以不能 CButton 没有 DECLARE_DYNCREATE 和 IMPLEMENT_DYNCREATE 所以也不能 请教大侠们关于宽字符的问题 VC 如何分拆数据 InstallShield制作出来的安装程序后缀是什么啊? 求<com技术内幕>随书代码 COM测试 一个简单的语法问题!请指教谢谢! CStatic显示位图,想加滚动条,如何加? 如何实时的展开树 如何更改程序右上角按钮的提示符? 检查VC编的程序中内存泄漏问题,什么软件最好! GetCurrentDirectory函数在开机启动时调用,运行结果错误! ★★★ 关于实现像防火墙那样的TCP拦截 ★★★
#0019 {
#0020 if (m_pfnCreateObject == NULL)
#0021 {
#0022 TRACE1("Error: Trying to create object which is not "
#0023 "DECLARE_DYNCREATE \nor DECLARE_SERIAL: %hs.\n",
#0024 m_lpszClassName);
#0025 return NULL;
#0026 }
#0027
#0028 CObject* pObject = NULL;
#0029 pObject = (*m_pfnCreateObject)();
#0030
#0031 return pObject;
#0032 }
#0033
#0034 CRuntimeClass* PASCAL CRuntimeClass::Load()
#0035 {
#0036 char szClassName[64];
#0037 CRuntimeClass* pClass;
#0038
#0039 // JJHOU : instead of Load from file, we Load from cin.
#0040 cout << "enter a class name... ";
#0041 cin >> szClassName;
#0042
#0043 for (pClass = pFirstClass; pClass != NULL; pClass = pClass->m_pNextClass)
#0044 {
#0045 if (strcmp(szClassName, pClass->m_lpszClassName) == 0)
#0046 return pClass;
#0047 }
#0048
#0049 TRACE1("Error: Class not found: %s \n", szClassName);
#0050 return NULL; // not found
#0051 }
看看http://hg993.51.net/crazylb/book/runtimeclass/runtimeclass.htm
#0043 for (pClass = pFirstClass; pClass != NULL; pClass = pClass->m_pNextClass)
中pFirstClass是什么?还有CRuntimeClass里面好像没有m_pNextClass的成员
CRuntimeClass没有firstClass这个静态变量怎么开始遍历?
所以也不能