我在现有工程里添加了一个类,继承了CWnd,用CWnd的CreateEx创建一个窗体,窗体风格不能是CHILD,需要动态创建,需要怎么实现?

解决方案 »

  1.   

      C×××Class *pClass = new C***Class;
      pWnd->CreateEx(WS_EX_CLIENTEDGE,pClass ,"Hi", WS_TABSTOP | WS_VISIBLE,
        5, 5, 30, 30, m_hWnd, (HMENU)1234);C***Class类的.h文件中要有DECLARE_DYNCREATE()和.cpp文件中有IMPLEMENT_DYNCREATE();
      

  2.   

    TO: shailen126 你pWnd是什么?怎么定义的?m_hWnd是this->m_hWnd么?第二个参数是类名,你塞个CWnd的子类指针是要干什么?
      

  3.   

    呵呵,不好意思,记的不太清楚了,试试这个吧
    CWnd::CreateEx(0,   _T("MyClass"),  "Hi", WS_TABSTOP | WS_VISIBLE,
        tipRect, NULL, 0); 
      

  4.   

    好的,我再试试,这个是MSDN上的吧:)
      

  5.   

    CWnd::CreateEx(0,   _T("MyClass"),  "Hi", WS_TABSTOP | WS_VISIBLE,
        tipRect, NULL, 0);这个应该可以的!
      

  6.   

    在父窗口的构造函数中注册窗口类:
    WNDCLASS wndcls;
    HINSTANCE hInst = AfxGetInstanceHandle();
    if(!(::GetClassInfo(hInst, CST_CLASSNAME, &wndcls)))
    { wndcls.style = CS_SAVEBITS;
    wndcls.lpfnWndProc = ::DefWindowProc;
    wndcls.cbClsExtra = wndcls.cbWndExtra = 0;
    wndcls.hInstance = hInst;
    wndcls.hIcon = NULL;
    wndcls.hCursor = LoadCursor(hInst, IDC_ARROW);
    wndcls.hbrBackground = NULL;
    wndcls.lpszMenuName = NULL;
    wndcls.lpszClassName = CST_CLASSNAME; BOOL ix=AfxRegisterClass(&wndcls);
    if (!ix) AfxThrowResourceException();

    在父窗口的初始化中:
    DWORD dwStyle   = WS_POPUP; 
    DWORD dwExStyle = WS_EX_TOOLWINDOW;CRect rt;
    pParentWnd->GetClientRect(&rt);  //pParentWnd是它的父窗口,这里取得了父窗口区域的大小 实际上行就是填满这个父窗口BOOL ix=CreateEx( dwExStyle, CST_CLASSNAME, NULL, dwStyle, rt.left, rt.top, rt.Width(), rt.Height(), pParentWnd->GetSafeHwnd(), NULL, NULL);