编辑框限制只能输入数字的问题

laoshibeizhanyong 2012-02-27 01:09:25
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函数根本不会跑到,这是为什么?需要在对话框类里面再添加什么消息吗?
...全文
718 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
冬天-来了 2013-08-16
  • 打赏
  • 举报
回复
请问楼主怎么做的啊?能不能把完整的流程讲一下,我也遇到这个问题急需解决,谢谢了
laoshibeizhanyong 2012-02-27
  • 打赏
  • 举报
回复
回复shn521 、liuli7786:
谢谢。PreTranslateMessage是我以前没用过的一个消息处理,让我学到许多。但是我有几个对话框都有需要限制为数字的编辑框,且有的对话框不只一个,所以用pMsg->hwnd 或者GetFocus()来判断是哪个编辑框太繁琐,代码又冗长,因此偏向于自己写个编辑框类。
谢谢你们,分我会给的。

回复quiteman:
之前是用classwizard关联变量,现在改用SubclassDlgItem,会调用了。十分感谢!
quiteman 2012-02-27
  • 打赏
  • 举报
回复
不知道你怎么关联的.建议在OnInitDialog时使用SubclassDlgItem进行关联。
quiteman 2012-02-27
  • 打赏
  • 举报
回复
上面条件写错了,应该是if ((nChar < '9' && nChar > '0') || nChar == '.')

sorry
quiteman 2012-02-27
  • 打赏
  • 举报
回复
自己写个类,继承CEdit.
然后改写afx_msg void OnChar(UINT nChar, UINT nRepCnt, UINT nFlags);
void CMyEdit::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
if ((nChar < '0' && nChar > '1') || nChar == '.')
{
CEdit::OnChar(nChar, nRepCnt, nFlags);
}
else
{
return;
}
}
liuli7786 2012-02-27
  • 打赏
  • 举报
回复
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);
}
shn521 2012-02-27
  • 打赏
  • 举报
回复
http://topic.csdn.net/u/20120215/14/1ab34cb6-4aee-46b4-b15d-f124e81784c4.html

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧