我在视图中手工添加一个控件,然后我想用
m_myclass.SubclassDlgItem(ID_xxx,this);
实现子类化,不过会出错。
可如果在CFormView下用就没问题。
请高人指点怎么解决。我不想用cformview啊

解决方案 »

  1.   

    出错是在cwnd:attach函数里
    ASSERT(FormHandlePermanent(hWndNew)==NULL);
      

  2.   

    CFormView没问题是因为那个控件我是直接从工具里拖过去的,不是手工画的
      

  3.   

    为什么把一个控件作为视图的子类?难道你的控件有相应的document?你的CFormView当然没有问题了.
    视图是一类非常特殊的CWnd,有protected:
    CDocument* m_pDocument;自己的文挡类支撑.
    不要把一般的控件作为视图的子类.
      

  4.   

    CView派生出CScrollView接着派生出CFormView.
      

  5.   

    控件第一次是怎么创建的? Create?
    从ASSERT的位置看应该是句柄表中还有其他对象与之关联, 你把第一次Create时用的CWnd对象Detach掉试试
      

  6.   

    多谢jasonshark(没暑假了...)
    detach之后确实没错了。不过又有新的问题。。
    在cwnd::subclasswindow函数里
    ASSERT(oldWndProc!=AfxGetAfxWndProc());过不去。。
      

  7.   

    其中的oldWndProc定义是这样的:
    WNDPROC oldWndProc=(WNDPROC)::SetWindowLongPtr(hWnd,GWLP_WNDPROC,(INT_PTR)AfxGetAfxWndProc());
      

  8.   

    to WindAndSnow(清风和明月游戏):
    我不是把控件做视图的子类,而是在视图里手工添加一个控件,然后用我自己的类对控件进行子类化
      

  9.   

    恩...找到原因了...
    创建控件的那个对象光调Detach是不行的,应该调用UnsubclassWindow();(里面会自动detach)MFC不允许对同一个HWND两次使用MFC的WndProc来Subclass
      

  10.   

    呵呵,不客气~
    其实我也是刚查的MFC代码,大家共同进步嘛, :)