0

MFC ダイアログ ベースのアプリのダイアログの 1 つにリッチ エディット ボックスがあります。数値のみを持つことができます。今私がやろうとしているのは、ユーザーが 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 に答える