编辑框限制只能输入数字的有关问题
编辑框限制只能输入数字的问题
MFC的编辑框虽然有number属性可以设置,但是不能输入小数点。
我自己继承CEdit写一个类MyEdit,
在MyEdit.h里面声明函数
afx_msg void OnChar(UINT nChar, UINT nRepCnt, UINT nFlags);
在MyEdit.cpp的消息映射中
BEGIN_MESSAGE_MAP(MyEdit, CEdit)
ON_WM_CHAR()
END_MESSAGE_MAP()
void MyEdit::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
//.....
}
接着为某个对话框的编辑框关联了MyEdit的变量。
运行后发现在那个编辑上输入内容,MyEdit类的OnChar函数根本不会跑到,这是为什么?需要在对话框类里面再添加什么消息吗?
------解决方案--------------------
http://topic.****.net/u/20120215/14/1ab34cb6-4aee-46b4-b15d-f124e81784c4.html
------解决方案--------------------
BOOL CTestDlg::PreTranslateMessage(MSG* pMsg)
{
if( pMsg->message == WM_CHAR // 字符消息
&& (pMsg->hwnd == m_ctrlEdit.m_hWnd))// m_ctrlEdit为与IDC_EDIT1对应的控件变量
{
//只允许输入一个小数点
if(pMsg->wParam == '.')
{
CString str;
int nPos = 0;
GetDlgItemText(IDC_EDIT1, str); // 获取edit中文本
nPos = str.Find('.'); // 查找.的位置
if(nPos>=0)
{
return TRUE; // 如果存在. 返回,即不再允许.输入
}
}
//只允许输入. 和数字
if(pMsg->wParam!='.' && (pMsg->wParam>'9' || pMsg->wParam<'0'))
{
return TRUE;
}
}
return CDialog::PreTranslateMessage(pMsg);
}
------解决方案--------------------
不知道你怎么关联的.建议在OnInitDialog时使用SubclassDlgItem进行关联。
MFC的编辑框虽然有number属性可以设置,但是不能输入小数点。
我自己继承CEdit写一个类MyEdit,
在MyEdit.h里面声明函数
afx_msg void OnChar(UINT nChar, UINT nRepCnt, UINT nFlags);
在MyEdit.cpp的消息映射中
BEGIN_MESSAGE_MAP(MyEdit, CEdit)
ON_WM_CHAR()
END_MESSAGE_MAP()
void MyEdit::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
//.....
}
接着为某个对话框的编辑框关联了MyEdit的变量。
运行后发现在那个编辑上输入内容,MyEdit类的OnChar函数根本不会跑到,这是为什么?需要在对话框类里面再添加什么消息吗?
------解决方案--------------------
http://topic.****.net/u/20120215/14/1ab34cb6-4aee-46b4-b15d-f124e81784c4.html
------解决方案--------------------
BOOL CTestDlg::PreTranslateMessage(MSG* pMsg)
{
if( pMsg->message == WM_CHAR // 字符消息
&& (pMsg->hwnd == m_ctrlEdit.m_hWnd))// m_ctrlEdit为与IDC_EDIT1对应的控件变量
{
//只允许输入一个小数点
if(pMsg->wParam == '.')
{
CString str;
int nPos = 0;
GetDlgItemText(IDC_EDIT1, str); // 获取edit中文本
nPos = str.Find('.'); // 查找.的位置
if(nPos>=0)
{
return TRUE; // 如果存在. 返回,即不再允许.输入
}
}
//只允许输入. 和数字
if(pMsg->wParam!='.' && (pMsg->wParam>'9' || pMsg->wParam<'0'))
{
return TRUE;
}
}
return CDialog::PreTranslateMessage(pMsg);
}
------解决方案--------------------
不知道你怎么关联的.建议在OnInitDialog时使用SubclassDlgItem进行关联。