如SDI主框架窗口的类名为Afx:400000:b:10011:6:400203等,将基改成MyMainWnd之类的自己定义类名,当然是不能改变其实它的窗口处理函数之类的

解决方案 »

  1.   

    不太明白,你不是想把CFrameWnd改了吧,要是的话直接改就成了。应该是这样吧。
      

  2.   

    是指的是用spy中看到的MFC的窗口的类名,我想大家都应该用过spy吧.
    在ATL中有一个宏DECLARE_WND_CLASS来指定产生窗口的类名,不知道大家有没其他方法.不过在PreCreateWindow(CREATESTRUCT& cs)中直接改cs的方法是不行的
    cs.lpszClass=LPSTR("MyMainWnd");这样没有类注册,所以在得到类时会失败
      

  3.   

    如MFC下的Tab控件的类名:SysTabControl32,按钮控件是用的Button,是无论怎么派生也是改变不了的,用SPY就可以看到
      

  4.   

    BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
    {
    if( !CFrameWnd::PreCreateWindow(cs) )
    return FALSE;
    // TODO: Modify the Window class or styles here by modifying
    //  the CREATESTRUCT cs

    cs.dwExStyle &= ~WS_EX_CLIENTEDGE;
    cs.lpszClass = AfxRegisterWndClass(0);

    //*************修改主窗口类名***********************************************
    WNDCLASS wndclass;
    ::GetClassInfo(AfxGetInstanceHandle(),cs.lpszClass,&wndclass);
    wndclass.lpszClassName="N5_GameRuner";
    VERIFY(AfxRegisterClass(&wndclass));
    //cs.hMenu=NULL;
    cs.lpszClass=wndclass.lpszClassName;


    return TRUE;
    }
      

  5.   

    我曾经在SDK的环境下改变过类名:
    GetClassInfo(...);
    然后可以修改其中的类注册成员,但是我发现在系统注册的预定义类中有一些行为是无法改变的比如:STATIC类中的光标
    也许这样的信息会给你一点帮助
      

  6.   

    You can use GetClassInfo(..) to get default values for the WNDCLASS
    struct. See KB article        Q251059 - HOWTO: Provide Your Own Window Class Name for an MFC
    Dialog Box