在对话框中动态创建ActiveX控件

RuanYSU 2012-12-18 10:41:22
可以在对话框的OnInitDialog()函数中使用CreateControl函数动态创建ActiveX吗,怎么实现?
...全文
182 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
RuanYSU 2012-12-19
  • 打赏
  • 举报
回复
引用 4 楼 yang79tao 的回复:
你光贴这个断言还不够,你得知道是怎么走到这里去的,是因你的代码调用而走到这里的话,说明你调用太早(窗口还未创建)。 另外,你得判断一下Create成功与否,有些控件有运行时lisence,如果没有,则只能静态创建而不能动态创建,典型的就是mscomm控件。
呵呵,新建一个工程,然后重头操作就好使了,总之谢谢你了
youngwolf 2012-12-18
  • 打赏
  • 举报
回复
你是否用向导生成了包装类? 包装类就有一个Create函数,更方便。
bsnry 2012-12-18
  • 打赏
  • 举报
回复
引用 6 楼 fishion 的回复:
一般的ActiveX控件可以Create创建的。。当然如果出现LS说的情况,你可以尝试下先把控件放到一个大小合适的无边框无标题栏的对话框中,然后再创建对话框到主窗口上,(PS:这只是一个思路,不一定可行)
大师可以参考这个文章: http://www.codeproject.com/Articles/211862/PreTranslateMessage-support-in-modeless-dialogs-in Modeless dialogs suffer this terrible fate of not having the blessings of PreTranslateMessage as they don't own the message pump.
fishion 2012-12-18
  • 打赏
  • 举报
回复
一般的ActiveX控件可以Create创建的。。当然如果出现LS说的情况,你可以尝试下先把控件放到一个大小合适的无边框无标题栏的对话框中,然后再创建对话框到主窗口上,(PS:这只是一个思路,不一定可行)
bsnry 2012-12-18
  • 打赏
  • 举报
回复
引用 4 楼 yang79tao 的回复:
你光贴这个断言还不够,你得知道是怎么走到这里去的,是因你的代码调用而走到这里的话,说明你调用太早(窗口还未创建)。 另外,你得判断一下Create成功与否,有些控件有运行时lisence,如果没有,则只能静态创建而不能动态创建,典型的就是mscomm控件。
] activex 的费模式对话框是没有消息循环的, 所以楼主一旦create后, 后果严重, 具体可以参codeproject的文章
youngwolf 2012-12-18
  • 打赏
  • 举报
回复
你光贴这个断言还不够,你得知道是怎么走到这里去的,是因你的代码调用而走到这里的话,说明你调用太早(窗口还未创建)。 另外,你得判断一下Create成功与否,有些控件有运行时lisence,如果没有,则只能静态创建而不能动态创建,典型的就是mscomm控件。
RuanYSU 2012-12-18
  • 打赏
  • 举报
回复
谢谢,刚生成了包装类 在OnInitDialog()函数用的这个语句 m_Player.Create(NULL,WS_VISIBLE|WS_TABSTOP,CRect(10,10,20,20),this,IDC_INPLAYER); m_Player是ActiveX类的一个对象, 可是调试时在occcont.cpp,BOOL COleControlContainer::FillListSitesOrWnds(_AFX_OCC_DIALOG_INFO* pOccDlgInfo)函数中的ASSERT(IsWindow(pTemp->m_hWnd));处出现断言错误,貌似是m_hWnd为空
lgstudyvc 2012-12-18
  • 打赏
  • 举报
回复
ActiveX是个什么?

3,245

社区成员

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

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