没有代码,不说出了什么问题,让别人怎么分析?我给你一段我的程序,你看看吧。// 仅在回车键抬起时发送命令
BOOL CCorForm::PreTranslateMessage(MSG* pMsg) 
{
CString str = _T("");
if( (WM_KEYFIRST <= pMsg->message) && (pMsg->message <= WM_KEYLAST) )
{
if(pMsg->message == WM_KEYDOWN)
{

} if( (pMsg->message == WM_KEYUP) && (pMsg->wParam == VK_RETURN) )
{
HWND hWnd=::GetFocus();
int iID=::GetDlgCtrlID(hWnd);
switch(iID)
{
case IDC_EDIT_PHA:
UpdateData(TRUE);
m_editPHA.GetWindowText( str );
PHA = atoi(str);
OnButtonSetPha();
break;
case IDC_EDIT_LLD:
UpdateData(TRUE);
m_editLLD.GetWindowText( str );
LLD = atoi(str);
OnButtonSetlld();
break;
case IDC_EDIT_NPB:
UpdateData(TRUE);
m_editNPB.GetWindowText( str );
NPB = atoi(str);
OnButtonSetNpb();
break;
case IDC_EDIT_NPW:
UpdateData(TRUE);
m_editNPW.GetWindowText( str );
NPW = atoi(str);
OnButtonSetNpw();
break;
}
}
}

return CFormView::PreTranslateMessage(pMsg);
}

解决方案 »

  1.   

    主要是这SendMessage的问题,如果注释掉就没事了。而且DEBUG时运行没问题,RELEASE时一回车程序就运行不了了。
    与自定义消息的语句主要有四处:我列出来,请大家帮我分析分析。
    1、#define WM_COMBO_ENTER WM_USER+5//此句位于CDicDlg头文件的上部2、 // Generated message map functions
    //{{AFX_MSG(CDicDlg)
    virtual BOOL OnInitDialog();
    afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
    afx_msg void OnPaint();
    //}}AFX_MSG
    afx_msg void OnEnter();//此句与自定义有关,是响应自定义消息的函数
    DECLARE_MESSAGE_MAP()
    3、源文件里,
       BEGIN_MESSAGE_MAP(CDicDlg, CDialog)
        ON_MESSAGE(WM_COMBO_ENTER,OnEnter)//此句与自定义消息有关
    //{{AFX_MSG_MAP(CDicDlg)
    ON_WM_SYSCOMMAND()
    ON_WM_PAINT()
    //}}AFX_MSG_MAP
    END_MESSAGE_MAP()
    4、 BOOL CDicDlg::PreTranslateMessage(MSG* pMsg) 
     {
       if (pMsg->message==WM_KEYDOWN)
      {//截获键盘消息
     
      //comboBox设置成dropdown时用这句
      CWnd *p = GetDlgItem(IDC_COMBO1)->GetWindow(GW_CHILD);
     
      //comboBox设置成droplist时用下面这句
      //CWnd *p=GetDlgItem(IDC_COMBO1);
     
      if(pMsg->hwnd==p->m_hWnd) //判断是combobox控件产生的消息时
      {
      if(pMsg->wParam==VK_RETURN) //在这里只截获了回车键
      {  
      //MessageBox("回车键被按下");
          UpdateData(true);
     
      this->SendMessage(WM_COMBO_ENTER);
     
      return true;
      }
      }
       }
    }
      

  2.   

    最后return  CDicDlg::PreTranslateMessage(MSG*   pMsg) ;一下
      

  3.   

    SendMessage这个参数不全,要出错
    至少是:
    SendMessage(WM_COMBO_ENTER,0,0); 参数里有一个要是COMBO的ID才对
      

  4.   

    楼上的二位:return     CDicDlg::PreTranslateMessage(MSG*       pMsg)   ;这句有,要是没有就该报错了
    SendMessage的后二个参数是缺省参数,如果没有特别要值可不写的。我的程序是DEBUG时没错,可运行,Release时也没错,运行后按回车时报错