如何在一个进程内组件(COM)中创建子窗口

waterflier 2002-10-11 02:31:36
IShowFrame中有一个方法,在用MFC写的进程内组件中是这样写的:

ShowFrame(/*in*/RECT* p_rectShow,/*in*/HINSTANCE hInstance,/*out*/HWND* p_hwndChild,/*in*/ULONG pWnd)
{
CWnd* cp_wndParent = reinterpret_cast<CWnd*>(pWnd);

AfxSetResourceHandle(AfxGetApp()->m_hInstance);
pThis->m_wndRight.Create(IDD_DIALOG_HEXVIEW,cp_wndParent)//IDD_DIALOG_HEXVIEW为一个空的对话框资


pThis->m_wndRight.ShowWidnow(SW_SHOW);
AfxSetResourceHandle(hInstance);
}
这段代码在debug模式下会触发断言:"cp_wndParent指向的不是一个有效对象?"(ASSERT_VALID(cp_WndParent));
ASSERT_VALID在msdn中的解释为:"Specifies an object of a class derived from CObject that has an

overriding version of the AssertValid member function."我在客户端调用这个借口方法时用这个宏判断了一下输

入参数没有问题,可是为什么到了组件里就有问题?到底什么才是一个有效的对象?我使用release编译后没有问题,

但是好像会引起bug?如果要在组件中创建子窗口到底该怎么做!大家讨论讨论,MFC的内部结构太变态了!


...全文
53 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
我不是大明 2002-10-18
  • 打赏
  • 举报
回复
组件里面不支持这个功能(建窗口),你怎么建呢!搞不明白你是什么意思?
Hanzo 2002-10-18
  • 打赏
  • 举报
回复
好像用CWindowImpl模板可以.具体看看MSDN.我也不是很肯定.
willianfree 2002-10-14
  • 打赏
  • 举报
回复
你的问题覆盖面很广,是一个全面的项目问题,单从这一小段源代码我看不出什么,建议你换个题目,让更多的高手来帮你。本人目前还不明白。
waterflier 2002-10-11
  • 打赏
  • 举报
回复
up

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧