关于MFC Activex 控件的句柄问题

fishinshenzhen 2007-04-10 11:13:49
在控件的构造函数里得到的句柄为0,在别的方法里就可以成功得到控件的句柄。
控件的句柄是什么时侯才生成的?
CActiveXcontrolCtrl::CActiveXcontrolCtrl()
{
InitializeIIDs(&IID_DActiveXcontrol, &IID_DActiveXcontrolEvents);
// TODO: 在此初始化控件的实例数据。

HWDN handle = GetSafeHwnd();//得到句柄为0
}


void CActiveXcontrolCtrl::Function(void)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
// TODO: 在此添加调度处理程序代码


HWDN handle = GetSafeHwnd();//成功得到句柄
}
...全文
356 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
huzs_82 2007-04-11
  • 打赏
  • 举报
回复
是不是m_hwnd?? (这个对有窗口的控件有用)
你在这里:CActiveXcontrolCtrl::CActiveXcontrolCtrl()得到控件句柄当然不0啦,
因为这时控件只是做了简单的初始化,但是还没有创建窗体,所以m_hwnd为空啊.
后面当然已经创建完窗口了,所以当然就有了控件的句柄了.
fishinshenzhen 2007-04-11
  • 打赏
  • 举报
回复
自己弄错了.
是应该这样处理吗?
窗口建立--> WM_CREATE --> OnCreate() 在这里得到窗口句柄
窗口消毁--> WM_DESTROY --> OnDestroy()


fishinshenzhen 2007-04-11
  • 打赏
  • 举报
回复
BOOL CActiveXCtrl::Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext)
{
// TODO: 在此添加专用代码和/或调用基类
HWND handle = GetSafeHwnd();//成功得到句柄
return COleControl::Create(lpszClassName, lpszWindowName, dwStyle, rect, pParentWnd, nID, pContext);
}

BOOL CActiveXCtrl::CreateEx(DWORD dwExStyle, LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, LPVOID lpParam)
{
// TODO: 在此添加专用代码和/或调用基类
HWND handle = GetSafeHwnd();//成功得到句柄
return COleControl::CreateEx(dwExStyle, lpszClassName, lpszWindowName, dwStyle, rect, pParentWnd, nID, lpParam);
}

我的控件是在窗口编辑器拉进去,然后连接到窗口的成员变量的,不是动态创建的.
我在控件代码重载了上面两个函数并设断点,但是程序正常运行,却不会在断点处停下来.
ouyh12345 2007-04-10
  • 打赏
  • 举报
回复
重载OnCreate函数,在函数里可得到句柄
youngwolf 2007-04-10
  • 打赏
  • 举报
回复

CActiveXcontrolCtrl是类的构造函数,GetSafeHwnd是获得窗口句柄,类与窗口有本质区别,窗口通常Atach到类,你在类的构造函数里要获取窗口句柄,神仙也不行。

3,248

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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