CEdit删除内容时出现警告?
我有一个CEdit框有一些预先填充的数字。 当用户使用退格键删除的CEdit框的内容,出现下面的警告消息框: “请输入一个有效的数字无效的数字包括:空格,小数,0,+, - ”CEdit删除内容时出现警告?
我希望能够在不显示警告框的情况下退格CEdit框的整个内容。但是,一旦进入,我想要检查它的值确实是一个数字。
有人可以告诉我如何做到这一点?
所有最好的 a。
就我个人而言,我只做过一次:我扩展了CEdit类,并将pretranslateMessage描述为ovverided。下面的代码:
// .H
#pragma once
// CHexEdit
#define WM_RETURN_PRESSED WM_USER + 5
#define WM_NUMBER_INSERTED WM_USER + 6
class CHexEdit : public CEdit
{
DECLARE_DYNAMIC(CHexEdit)
public:
CHexEdit();
virtual ~CHexEdit();
protected:
DECLARE_MESSAGE_MAP()
public:
afx_msg void OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags);
virtual BOOL PreTranslateMessage(MSG* pMsg);
};
// .cpp
#include "stdafx.h"
#include "HexEdit.h"
#include "Utils.h"
// CHexEdit
IMPLEMENT_DYNAMIC(CHexEdit, CEdit)
CHexEdit::CHexEdit()
{
}
CHexEdit::~CHexEdit()
{
}
BEGIN_MESSAGE_MAP(CHexEdit, CEdit)
ON_WM_KEYUP()
END_MESSAGE_MAP()
// CHexEdit message handlers
BOOL CHexEdit::PreTranslateMessage(MSG* pMsg)
{
bool bAFChars;
bool b09Chars;
bool bValidInput;
bool bControlChars;
BOOL bOK;
if (pMsg->message == WM_KEYDOWN)
{
bAFChars = pMsg->wParam >= 'A' && pMsg->wParam <= 'F';
bAFChars |= pMsg->wParam >= 'a' && pMsg->wParam <= 'f';
b09Chars = pMsg->wParam >= '0' && pMsg->wParam <= '9';
bValidInput = bAFChars || b09Chars;
bControlChars = pMsg->wParam >= 0x08 && pMsg->wParam <= 0x2F;
bControlChars = bControlChars || (pMsg->wParam >= 0x5B && pMsg->wParam <= 0x5F);
bControlChars = bControlChars || (pMsg->wParam >= VK_NUMPAD0 && pMsg->wParam <= VK_NUMPAD9);
if (bValidInput || bControlChars)
{
bOK = TRUE;
}
else
{
bOK = FALSE;
}
if (!bOK) return TRUE; // Non fare la pre-translate.
}
return CEdit::PreTranslateMessage(pMsg);
}
void CHexEdit::OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags)
{
CString strValue;
switch(nChar)
{
case VK_RETURN:
/*GetParent()->PostMessage(WM_RETURN_PRESSED, 0, (LPARAM)byNewValue);*/
break;
default:
GetParent()->PostMessage(WM_NUMBER_INSERTED, 16);
break;
}
CEdit::OnKeyUp(nChar, nRepCnt, nFlags);
}
很明显,你必须抓住信息在你的容器类,但是这不应该是一个问题。希望这将有助于解决您的问题。 Lemme知道。
嗨谢谢大家的帮助。 – user2859884
读你的回复,我想我有一个更清晰的图片。通过将该字段定义为整数,您将获得内置的MFC验证。因此,您可以尝试像Scott建议的那样添加DDV_例程,或者将字段类型更改为字符串(例如CString),并通过之前提到的捕获的消息进行自己的验证。无论哪种方式都可以工作,但是,如果您通过自己的例程验证字段,则会获得更大的灵活性。
嗨,这正是我所做的,它工作得很好。感谢大家的帮助。 – user2859884
你可以发布你现在使用的代码吗?有几种方法可以处理这个问题(比如陷阱ON_EN_UPDATE),而且现在看不到你在做什么,这很难评论。 – rrirower
嗨rrirower我没有代码,但我修改ON更改消息。我应该在ON_EN_UPDATE内放入什么?我没有专门做任何检查。似乎MFC正在为我做检查(看看它是否是一个整数) – user2859884
似乎MFC增加了检查本身,并通过MessageBox报告了情况。这很好,但是如果用户删除了CEdit框的内容并且得到了这个警告信息,这对用户来说是非常烦人的。因此,我想在它出现之前拦截这个MessageBox。有人可以告诉我如何做到这一点? – user2859884