手工添加控件的子类化问题 我在视图中手工添加一个控件,然后我想用m_myclass.SubclassDlgItem(ID_xxx,this);实现子类化,不过会出错。可如果在CFormView下用就没问题。请高人指点怎么解决。我不想用cformview啊 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 出错是在cwnd:attach函数里ASSERT(FormHandlePermanent(hWndNew)==NULL); CFormView没问题是因为那个控件我是直接从工具里拖过去的,不是手工画的 为什么把一个控件作为视图的子类?难道你的控件有相应的document?你的CFormView当然没有问题了.视图是一类非常特殊的CWnd,有protected: CDocument* m_pDocument;自己的文挡类支撑.不要把一般的控件作为视图的子类. CView派生出CScrollView接着派生出CFormView. 控件第一次是怎么创建的? Create?从ASSERT的位置看应该是句柄表中还有其他对象与之关联, 你把第一次Create时用的CWnd对象Detach掉试试 多谢jasonshark(没暑假了...)detach之后确实没错了。不过又有新的问题。。在cwnd::subclasswindow函数里ASSERT(oldWndProc!=AfxGetAfxWndProc());过不去。。 其中的oldWndProc定义是这样的:WNDPROC oldWndProc=(WNDPROC)::SetWindowLongPtr(hWnd,GWLP_WNDPROC,(INT_PTR)AfxGetAfxWndProc()); to WindAndSnow(清风和明月游戏):我不是把控件做视图的子类,而是在视图里手工添加一个控件,然后用我自己的类对控件进行子类化 恩...找到原因了...创建控件的那个对象光调Detach是不行的,应该调用UnsubclassWindow();(里面会自动detach)MFC不允许对同一个HWND两次使用MFC的WndProc来Subclass 呵呵,不客气~其实我也是刚查的MFC代码,大家共同进步嘛, :) MFC的一个小问题 用什么函数获得菜单是否打钩,以便反复执行 求:Installshield中怎么改路径名? DirectShow写拉模式Source Filter的问题,有经验的来谈谈,up也给分 高分请教 GectWindowRect(...)得到的窗口大小为何是8X8,而客户区大小是0??? 关于CInternetSession的问题 如何控制一个单文档应用程序的初始窗口大小!? 菜鸟问题:初始化代码放在哪? 如何给一个CTime类型的对象赋值?????? 请教一个C/S体系中客户端获取数据的设计 如何得到CString中字符个数?
ASSERT(FormHandlePermanent(hWndNew)==NULL);
视图是一类非常特殊的CWnd,有protected:
CDocument* m_pDocument;自己的文挡类支撑.
不要把一般的控件作为视图的子类.
从ASSERT的位置看应该是句柄表中还有其他对象与之关联, 你把第一次Create时用的CWnd对象Detach掉试试
detach之后确实没错了。不过又有新的问题。。
在cwnd::subclasswindow函数里
ASSERT(oldWndProc!=AfxGetAfxWndProc());过不去。。
WNDPROC oldWndProc=(WNDPROC)::SetWindowLongPtr(hWnd,GWLP_WNDPROC,(INT_PTR)AfxGetAfxWndProc());
我不是把控件做视图的子类,而是在视图里手工添加一个控件,然后用我自己的类对控件进行子类化
创建控件的那个对象光调Detach是不行的,应该调用UnsubclassWindow();(里面会自动detach)MFC不允许对同一个HWND两次使用MFC的WndProc来Subclass
其实我也是刚查的MFC代码,大家共同进步嘛, :)