2013-06-01 43 views
0

我在MFC對話框的應用程序的對話框中有一個豐富的編輯框。 它只能有數字值。 現在我想要做的是不允許用戶輸入一個大於4567899的值。 如果用戶在富編輯框中輸入數字並按數字鍵將使已輸入的值在文本框中大於4567899那麼就讓應用程序的行爲像沒有按鍵被按下或只是忽略該按鍵。CRichEditCtrl如何忽略按鍵?

我做了一些研究,發現這可以通過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); 

的擊打其沒有工作,所以請,如果有人可以幫助或能提出不同的方式做我正在努力實現。

謝謝

回答

0

您好像正在將消息發送到對話框。它必須被髮送到編輯控件。

m_objectIDInstance.SendMessage(...) 
+0

是這樣的,每當我按下一個鍵控制來到上述功能,並通過檢查pMsgFilter-> wParam我可以知道什麼鍵被按下。 現在我修改了一下功能,檢查我的上述文章。使其工作,但我想實現的仍然沒有發生。請建議謝謝。 – lsrawat