解决GetDlgItem 使用时出现ASSERT(::IsWindow(m_hWnd))断言
2011-01-12 11:05
411 查看
基于对话框或SDI的情况下,有时手动添加,或从ToolBox拖动控件(比如CEdit, CListBox等)用于工程。当使用父窗口的GetDlgItem函数对这些控件进行操作时,会有时弹出断言。比如下面的代码段:
就会在主程序结束的时候弹出断言。断言追踪到下面代码
停止在ASSERT(::IsWindow(m_hWnd)); 这个地方
暂时解决的方式可以用下面代码:
总结:看来要在父窗口中操作其内含控件的时候,或者要使用父窗口的方法的时候加上一个判断是必要的:
CWnd* pwnd = GetDlgItem(IDE_EDIT_CODE); // CEdit派生类 if (pwnd != NULL ) { pwnd->DestroyWindow(); }
就会在主程序结束的时候弹出断言。断言追踪到下面代码
CWnd* CWnd::GetDlgItem(int nID) const { ASSERT(::IsWindow(m_hWnd)); if (m_pCtrlCont == NULL) return CWnd::FromHandle(::GetDlgItem(m_hWnd, nID)); else return m_pCtrlCont->GetDlgItem(nID); }
停止在ASSERT(::IsWindow(m_hWnd)); 这个地方
暂时解决的方式可以用下面代码:
if (::IsWindow(GetSafeHwnd())) { CWnd* pwnd = GetDlgItem(IDE_EDIT_CODE); // CEdit派生类 if (pwnd != NULL ) { pwnd->DestroyWindow(); } }
总结:看来要在父窗口中操作其内含控件的时候,或者要使用父窗口的方法的时候加上一个判断是必要的:
if (::IsWindow(m_hWnd)) { ... } // or if ( ::IsWindow(GetSafeHWnd())) { ... } // or ASSERT( ::IsWindow(...));
相关文章推荐
- BOOL CWnd::DestroyWindow()中出现ASSERT(m_hWnd == hWndOrig)断言的原因及解决方法
- GetDlgItem使用时出现ASSERT断言或报错
- BOOL CWnd::DestroyWindow()中出现ASSERT(m_hWnd == hWndOrig)断言的原因及解决方法
- java使用assert断言时不起作用的解决办法
- 关于CFont类型成员变量m_font 在使用m_font.CreatePointFont时出现ASSERT(m_hObject == NULL)断言
- 解决两个对话框传值程序中断在ASSERT(::IsWindow(m_hWnd)); return InsertItem(LVIF_TEXT, nItem, lpszItem, 0, 0, 0, 0);
- ElasticSearch使用jdbc-river同步数据库出现dateOptionalTime不能识别的问题解决办法一则
- java断言assert的使用方法
- 使用jad批量将class反编译为java时出现阻塞--解决办法
- 使用SpringMVC注解时浏览器开发者工具中出现404问题以及解决方法
- Delphi使用BDE连接远程MS SQL SERVER 2000数据库时出现“Db-library network communciations layer not loaded.”错误的解决方法
- jQuery使用serialize()表单序列化时出现中文乱码问题的解决办法
- 多线程出现脏读以及解决方法(使用synchronized)
- dom4j 使用xpath 解析 persistence.xml 出现xmlns后不能解析问题解决
- 使用Genymotion调试出现错误INSTALL_FAILED_CPU_ABI_INCOMPATIBLE解决办法
- android中使用代码混淆出现Conversion to Dalvik format failed with error 1错误的解决办法
- 使用RecyclerView notifyItemChanged()出现图片闪烁问题解决
- 升级10.11后使用CocoaPod出现-bash: pod: command not found 解决办法
- 开源框架SlidingMenu使用出现的一些问题 解决方法