0

我在基于 MFC 对话框的应用程序的一个对话框中有一个丰富的编辑框。它只能有数值。现在我要做的是不允许用户输入大于 4567899 的值。如果用户在丰富的编辑框中输入数字并按数字键将使文本框中已经输入的值大于 4567899 然后只是使应用程序的行为就像没有按下任何键一样,或者只是忽略该按键。

我做了一些研究,发现这可以通过 EN_MSGFILTER 事件来完成,但我不确定。

所以这就是功能

    void CMyDialog::OnMsgfilterObjectid(NMHDR* pNMHDR, LRESULT* pResult)  
    {
char tempID[10];
MSGFILTER *pMsgFilter = reinterpret_cast<MSGFILTER *>(pNMHDR);
// TODO: The control will not send this notification unless you override the
// CDialog::OnInitDialog() function to send the EM_SETEVENTMASK message
// to the control with either the ENM_KEYEVENTS or ENM_MOUSEEVENTS flag 
// ORed into the lParam mask.

// TODO: Add your control notification handler code here

*pResult = 0;
    if((pMsgFilter->wParam >= 48) || pMsgFilter->wParam<=57) // check if 0-9 is pressed
{ 
     m_objectIDInstance.GetLine(NULL,tempID);  //m_objectIDInstance is a CRichEditCtrl
 tempID[m_objectIDInstance.LineLength()] = '\0';
 if ((atol(tempID) + (pMsgFilter->wParam-48)) > 4567899)
     {
     *pResult=1;
     }
    }
    }

在 OnInitDialog() 我添加了以下行:

    m_objectIDInstance.SendMessage(EM_SETEVENTMASK, 0, ENM_KEYEVENTS);

但是它不起作用,所以请如果有人可以提供帮助或可以建议一种不同的方式来做我正在尝试实施的事情。

谢谢

4

1 回答 1

0

您似乎正在将消息发送到对话框。它必须发送到编辑控件。

m_objectIDInstance.SendMessage(...)
于 2013-06-01T18:08:32.547 回答