MFC控件 Edit,控制只能输入数字和小数点
2021-06-03 02:01
标签:默认 情况 ret 默认值 出现 epc find period begin 照抄这个的 Edit 控件的属性Number,只能控制只输入数字,不能控制输入小数的情况,实现这个就继承CEdit来写新的类 .h 代码 .cpp 这个代码有个bug,第二次输入 . 时提示 “小数点只能输一次”,这个没问题,但第三次输入 . 时,提示 “只能输入小数,退格键” 是不是第二次输入的小数点没有处理,第三次输入后nChar的值就不是输入的值了,但不影响功能,就不改了 MFC控件 Edit,控制只能输入数字和小数点 标签:默认 情况 ret 默认值 出现 epc find period begin 原文地址:https://www.cnblogs.com/ckrgd/p/14686680.html 1 #pragma once
2
3 // CEditEx
4
5 class CEditEx : public CEdit
6 {
7 DECLARE_DYNAMIC(CEditEx)
8
9 public:
10 CEditEx();
11 virtual ~CEditEx();
12
13 protected:
14 DECLARE_MESSAGE_MAP()
15 public:
16 afx_msg void OnChar(UINT nChar, UINT nRepCnt, UINT nFlags);
17 afx_msg void OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags);
18 };
1 // EditEx.cpp : 实现文件
2 //
3
4 #include "stdafx.h"
5 #include "CEditEx.h"
6
7 // CEditEx
8
9 IMPLEMENT_DYNAMIC(CEditEx, CEdit)
10
11 CEditEx::CEditEx()
12 {
13 }
14
15 CEditEx::~CEditEx()
16 {
17 }
18
19 BEGIN_MESSAGE_MAP(CEditEx, CEdit)
20 ON_WM_CHAR()
21 ON_WM_KEYUP()
22 END_MESSAGE_MAP()
23
24 // CEditEx 消息处理程序
25 void CEditEx::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
26 {
27 // TODO: 在此添加消息处理程序代码和/或调用默认值
28
29 // 处理小数点
30 if (nChar == ‘.‘)
31 {
32 CString str;
33 GetWindowText(str);
34
35 // 限制第一位为小数
36 if (str.GetLength() == 0)
37 {
38 // 第一位输入小数点
39 MessageBox(_T("第一位不可以是小数点"));
40 return;
41 }
42 // 限制只允许有一个小数点
43 if (str.Find(‘.‘) == -1)
44 {
45 CEdit::OnChar(nChar, nRepCnt, nFlags);
46 }
47 else
48 {
49 if (str[0] == ‘.‘)
50 {
51 SetWindowText(str.Mid(1, str.GetLength()));
52 MessageBox(_T("第一位不可以是小数点"));
53 }
54 // 小数点出现第二次
55 MessageBox(_T("小数点只能输入一次"));
56 }
57 }
58 // 数理数字和退格键
59 else if ((nChar >= ‘0‘ && nChar ‘9‘) || nChar == 0x08)
60 {
61 CEdit::OnChar(nChar, nRepCnt, nFlags);
62 }
63 else
64 {
65 // 出现非数字键,退格键
66 MessageBox(_T("只能输入数字,退格键"));
67 }
68 }
69
70 // 修复先输入数字之后,可以在第一位输入小数点
71 void CEditEx::OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags)
72 {
73 // TODO: 在此添加消息处理程序代码和/或调用默认值
74 if (nChar == VK_DECIMAL || nChar == VK_OEM_PERIOD) {
75 CString str;
76 GetWindowText(str);
77 if (str[0] == ‘.‘) {
78 SetWindowText(str.Mid(1, str.GetLength()));
79 MessageBox(_T("第一位不可以是小数点"));
80 }
81 }
82 CEdit::OnKeyUp(nChar, nRepCnt, nFlags);
83
84 }
文章标题:MFC控件 Edit,控制只能输入数字和小数点
文章链接:http://soscw.com/index.php/essay/89950.html