您的位置:首页 > 其它

::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);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐