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);
しかし、うまくいかないので、誰かが私が実装しようとしていることを助けるか、別の方法を提案できるかどうかを教えてください。
ありがとう