不知道VC里面有没有这种根据给定类型的字符串比如:"CRect","CButton"……
自动生成该类型实例的方法?

解决方案 »

  1.   

    这个应该就是所谓的动态创建吧,看看候sir的深入嵌入mfc中的第三章,或许会有帮助
      

  2.   

    #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 }
      

  3.   

    好像听说MFC就是这么来的,高!
    看看http://hg993.51.net/crazylb/book/runtimeclass/runtimeclass.htm
      

  4.   

    awnucel:
    #0043 for (pClass = pFirstClass; pClass != NULL; pClass = pClass->m_pNextClass)
    中pFirstClass是什么?还有CRuntimeClass里面好像没有m_pNextClass的成员
      

  5.   

    侯老的文章只是讲了原理,但是怎么用呢?
    CRuntimeClass没有firstClass这个静态变量怎么开始遍历?
      

  6.   

    动态创建的类必须从CObject继承吧,CRect就不行了,除非你自己实现一套机制
      

  7.   

    估计需要自己实现一个类似的。一般的做法是设计一个struct,其中包括一个字符串和一个函数指针,然后用宏声明出一个这样的sturct的数组,每当要创建对象时,就遍历这个数组,用字符串进行比较,如果相同就调用那个函数指针来创建对象。说起来容易做起来还需要一番摸索,如果想要个简单的,可以参考MFC的MESSAGE_MAP的机制。你做一个全局的那种东西就行了。
      

  8.   

    CRect 不是继承自CObject所以不能
      

  9.   

    CButton 没有 DECLARE_DYNCREATE 和 IMPLEMENT_DYNCREATE 
    所以也不能