没有代码,不说出了什么问题,让别人怎么分析?我给你一段我的程序,你看看吧。// 仅在回车键抬起时发送命令
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);
}
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、#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;
}
}
}
}
至少是:
SendMessage(WM_COMBO_ENTER,0,0); 参数里有一个要是COMBO的ID才对
SendMessage的后二个参数是缺省参数,如果没有特别要值可不写的。我的程序是DEBUG时没错,可运行,Release时也没错,运行后按回车时报错