::GetDlgItem调用 窗口控件遇到的中断 (自己遇到的问题,已被解决)
2009-09-10 17:00
447 查看
BOOL CDlgShape::OnInitDialog()
{
CDialog::OnInitDialog();
//CString strWFSVersion = _T("1.0.0");
//CString strWFSRequestMethod = _T("GET");
//CString strWFSConnectionType = _T("WFS");
HWND hwnd = this->m_hWnd;
//ASSERT(hwnd != 0);
((CComboBox*)GetDlgItem(IDC_COMBO_SHAPESTATUS))->ResetContent();
((CComboBox*)GetDlgItem(IDC_COMBO_SHAPESTATUS))->AddString("ON");
//((CComboBox*)GetDlgItem(IDC_COMBO_SHAPESTATUS))->AddString("OFF");
//m_SHAPEStatus.AddString("OFF"); 控件变量用法
((CComboBox*)::GetDlgItem(hwnd,IDC_COMBO_SHAPESTATUS))->AddString("OFF");
((CComboBox*)GetDlgItem(IDC_COMBO_SHAPESTATUS))->SetCurSel(1);
代码如上所示,若用蓝色的代码,编译无问题,但是用了红色部分代码,会产生一个中断,ASSERT(::IsWindow(m_hWnd))
应该是父窗口句柄无法找到窗口的问题,但是hwnd确实是有值的,为何这个用法会产生这个中断?
如果说窗口未创建的话,红色部分的代码我曾在 一个button的事件函数里用过,也是这个问题,但是用控件变量却是可以的
有高手知道是为何吗??
1.
::GetDlgItem(hwnd,IDC_COMBO_SHAPESTATUS))这样得到是窗口句柄,不能直接转化为CComboBox*.
你要调用函数转换.
2.
一个是CWnd* ,一个是HWND两者不能强制转换
3.
HWND hwnd = ::GetDlgItem(this->GetSafeHwnd(),IDC_COMBO_SHAPESTATUS);
CComboBox* combo = (CComboBox*)FromHandle(hwnd);
combo->AddString("OFF");
同理:
//以下用法有错,不能通过句柄获取内容,错误为找不到父窗口句柄,用下面方法可以
//HWND hwndwms = WMS_Page.m_hWnd;
//CEdit* pEdit = (CEdit*)::GetDlgItem(hwndwms,IDC_EDIT_WMSNAME);
//if (pEdit)
//{
// pEdit->GetWindowText(strLayerName);//LAYER
//}
//此种方法正确
//HWND hwnd = ::GetDlgItem(hwndwms,IDC_EDIT_WMSDATA);
//CEdit* combo = (CEdit*)FromHandle(hwnd);
//combo->GetWindowText(strWMSData);
{
CDialog::OnInitDialog();
//CString strWFSVersion = _T("1.0.0");
//CString strWFSRequestMethod = _T("GET");
//CString strWFSConnectionType = _T("WFS");
HWND hwnd = this->m_hWnd;
//ASSERT(hwnd != 0);
((CComboBox*)GetDlgItem(IDC_COMBO_SHAPESTATUS))->ResetContent();
((CComboBox*)GetDlgItem(IDC_COMBO_SHAPESTATUS))->AddString("ON");
//((CComboBox*)GetDlgItem(IDC_COMBO_SHAPESTATUS))->AddString("OFF");
//m_SHAPEStatus.AddString("OFF"); 控件变量用法
((CComboBox*)::GetDlgItem(hwnd,IDC_COMBO_SHAPESTATUS))->AddString("OFF");
((CComboBox*)GetDlgItem(IDC_COMBO_SHAPESTATUS))->SetCurSel(1);
代码如上所示,若用蓝色的代码,编译无问题,但是用了红色部分代码,会产生一个中断,ASSERT(::IsWindow(m_hWnd))
应该是父窗口句柄无法找到窗口的问题,但是hwnd确实是有值的,为何这个用法会产生这个中断?
如果说窗口未创建的话,红色部分的代码我曾在 一个button的事件函数里用过,也是这个问题,但是用控件变量却是可以的
有高手知道是为何吗??
1.
::GetDlgItem(hwnd,IDC_COMBO_SHAPESTATUS))这样得到是窗口句柄,不能直接转化为CComboBox*.
你要调用函数转换.
2.
一个是CWnd* ,一个是HWND两者不能强制转换
3.
HWND hwnd = ::GetDlgItem(this->GetSafeHwnd(),IDC_COMBO_SHAPESTATUS);
CComboBox* combo = (CComboBox*)FromHandle(hwnd);
combo->AddString("OFF");
同理:
//以下用法有错,不能通过句柄获取内容,错误为找不到父窗口句柄,用下面方法可以
//HWND hwndwms = WMS_Page.m_hWnd;
//CEdit* pEdit = (CEdit*)::GetDlgItem(hwndwms,IDC_EDIT_WMSNAME);
//if (pEdit)
//{
// pEdit->GetWindowText(strLayerName);//LAYER
//}
//此种方法正确
//HWND hwnd = ::GetDlgItem(hwndwms,IDC_EDIT_WMSDATA);
//CEdit* combo = (CEdit*)FromHandle(hwnd);
//combo->GetWindowText(strWMSData);
相关文章推荐
- ::GetDlgItem调用 窗口控件遇到的中断
- 多线程委托之跨线程问题分析--在创建窗口句柄之前,不能在控件上调用 Invoke 或 BeginInvoke(解决方法已更新)
- Android 调用系统相机拍照并且显示在相册中,以及中间可能会遇到的一些问题的解决
- 在access的vba中循环调用带参数查询时遇到的问题及解决办法
- 这个常见的错误。大家记录下自己曾遇到的这样问题的解决方法
- 遇到问题并不可怕,最怕的是自己不知道怎么去解决问题。
- 调用一些自己写的类的时候遇到的问题
- asp中遇到的几个问题——数据库连接,几个常见控件的使用问题及其解决
- 自己学习Struts2过程中遇到的问题及解决办法(第一天)
- react native下开发应用遇到的几个问题以及自己的解决办法
- linux deepin 2013自己遇到的问题解决
- 自己遇到的有关Genymotion使用中遇到的一些问题及解决方式
- 解决SurfaceView调用setZOrderOnTop(true)遮挡其他控件的问题
- 解决“ .dll(或.ocx)控件已加载,但对DllregisterServer的调用失败,错误代码为0x80004005”问题的两种终极方法:SubInACL安装 VS 命令提示符
- 关于JAVA调用Matlab遇到的问题+JDK重装后原有项目报错的解决办法
- 关于tomcat端口的修改,以及同时部署多个应用,自己遇到的问题以及解决办法
- Win7/Win8中注册控件失败,提示“DllRegisterServer的调用失败,错误代码为0x******** ” 问题的解决办法
- [WPF]Show新窗口时TextBox等控件无法输入问题解决方法
- [Django]我的第一个网页,报错啦~(自己实现过程中遇到问题以及解决办法)
- java.lang.Process调用程序阻塞问题解决(刚刚遇到的问题,看有人解决了,转一下:) )