GetDlgItem问题
我用这种方法捕获在控件中按下回车键:BOOL   PreTranslateMessage(MSG*   pMsg)     
{   

if(pMsg->message   ==   WM_KEYDOWN)   
{   
CWnd* p   =   GetDlgItem(IDC_EDIT1);   

if(pMsg->wParam==VK_RETURN && pMsg->hwnd==p->m_hWnd)   
{    AfxMessageBox("OK");
return   TRUE;   
}    }   
return   CDialog::PreTranslateMessage(pMsg);   
}//----------------------------------------------
GetDlgItem(IDC_EDIT1); 获取的是一个edit控件的CWnd指针
以上是没问题的,但如果我要捕获的是一个combobox控件,就不行了
例如:BOOL   PreTranslateMessage(MSG*   pMsg)     
{   

if(pMsg->message   ==   WM_KEYDOWN)   
{   

CWnd* p   =   GetDlgItem(IDC_COMBO1);  //!!!!

if(pMsg->wParam==VK_RETURN && pMsg->hwnd==p->m_hWnd)   
{    AfxMessageBox("OK");
return   TRUE;   
}    }   
return   CDialog::PreTranslateMessage(pMsg);   
}请问如何在一个combobox中捕获回车消息?

解决方案 »

  1.   

    if(pMsg->hwnd==m_edit.GetSafeHwnd())可以但 
    if(pMsg->hwnd==m_combo.GetSafeHwnd())
    就不行
      

  2.   

    sf  OK ,因为combo 不只一个窗口
    具体内容等下..
      

  3.   

    修改如下:
    if(pMsg->message   ==   WM_KEYDOWN)   
    {   
    CWnd* p   =   GetDlgItem(IDC_COMBO1);   
    HWND ComEdit=FindWindowEx(p->m_hWnd,NULL,"Edit",NULL);
    if(pMsg->wParam==VK_RETURN && pMsg->hwnd==ComEdit)   
    {   
    AfxMessageBox("OK");
    return   TRUE;   
    }    }   
    对于窗口的关系有时候还是先用SPY++工具看看关系,再开始代码.有什么问题的话继续..
    应该能解决你的问题..OK  结帐...谢谢了..
      

  4.   

    楼主你捕获combobox的什么消息?
    combobox是一个组合型窗口,如果你是要捕获combobox的edit消息可以用
    enumchildwindows这个API来取得EDIT的hwnd