CWnd::Create

场景:关于CWndCreate有关问题

关于CWnd的Create问题
我觉得CWnd的Create这个方法很坑爹,很不好操作啊。原型是:
virtual BOOL Create( LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext = NULL);

特别是第一个参数是lpszClassName类名?我提供不了类名还创建不了了?
我自己写了很多个自定义控件比如CMyControl1,CMyControl2,CMyControl3,CMyControl4然后都放到一个CArray<CWnd,CWnd> myControlArr;数组里面,现在要循环数组myControlArr动态我的四个自定义控件。使用CWnd的Create方法。

问题来了
。。。接下来我无语了,我该怎么提供我自定义控件的类名??

1、难道直接传字符串“CMyControl1”,“CMyControl2”等等?
2、如果1不正确,那该怎么弄?
3、如果1正确,帮我骂一下C++的这种做法,然后请帮我解释一下原因噢!!谢谢


呵呵,最后牢骚一句,写C++的人是不是都会变成疯子啊。。。我以前认识的两个搞C++的感觉神经都有点不正常,有一个还跳过楼。。。。呜呜。。我可不想这样啊!!

求大侠帮忙解答


------解决方案--------------------
创建
C/C++ code
        // 等待视图
        if ( !m_wndViewWaitting.Create(NULL, NULL, WS_CHILD, CRect(0, 0, 0, 0), this, AFX_IDW_PANE_LAST, NULL)) //AFX_IDW_PANE_FIRST 当前活动子窗体
        {
            TRACE0("未能创建等待窗体\n");
            return false;
        }

------解决方案--------------------
你可以自己注册一个类名,不然,If null, uses the default CWnd attributes.

------解决方案--------------------
你说对了,确实是直接传字符串“CMyControl1”,“CMyControl2”等等
以下是msdn的例子
C/C++ code
// Dynamically create static control using CWnd::Create,
// instead of with CStatic::Create, which doesn't
// need the "STATIC" class name.

void CMyDlg::OnCreateStatic() 
{
   CWnd* pWnd = new CWnd;
   pWnd->Create(_T("STATIC"), "Hi", WS_CHILD | WS_VISIBLE,
       CRect(0, 0, 20, 20), this, 1234);
}

------解决方案--------------------
你自定义的控件有基类吗?没基类你自己创建总有个控件的类名啊?连个类名都没有你怎么创建?
------解决方案--------------------
觉得不好用就用CreateWindow(Ex) API吧,自己RegisterClass注册类