::GetDlgItem调用 窗口控件遇到的中断

  ::GetDlgItem调用 窗口控件遇到的中断
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);
 
 

你可能感兴趣的:(职场,休闲,::GetDlgItem,IsWindows)