//自定义Edit,实现十六进制输入控制,使用OnChar()函数实现
//MyEdit.h
#pragma once class CMyEdit : public CEdit {
DECLARE_DYNAMIC(CMyEdit) -----------------------① public:
CMyEdit(){};
protected:
DECLARE_MESSAGE_MAP() ----------------------------②
public:
afx_msg void OnChar(UINT nChar, UINT nRepCnt, UINT nFlags); ------③
};
//MyEdit.cpp
#include "stdafx.h" -----------------------------------④
#include "MyEdit.h" IMPLEMENT_DYNAMIC(CMyEdit, CEdit) BEGIN_MESSAGE_MAP(CMyEdit, CEdit)
ON_WM_CHAR()
END_MESSAGE_MAP() void CMyEdit::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
if((nChar>=&&nChar<=)||(nChar>=&&nChar<=) || //0~9, A~F
(nChar>=&&nChar<=) || (nChar==) || //a~f, space,
(nChar == ) || nChar == ){ //backspace, delete
CEdit::OnChar(nChar, nRepCnt, nFlags);
}
}

#pragma once 防止重复编译,头文件很可能会被多个cpp文件包含,这样一方面节省时间,另一方面防止类或者变量重复定义(全局变量可使用extern),c语言里面采用:

 #ifndef
#define __MYEDIT_H__
...
#endif

①DECLARE_DYNAMIC和IMPLEMENT_DYNAMIC是为了确定运行时对象属于哪一个类而定义的宏。

同时还有一对宏DECLARE_DYNCREATE和IMPLEMENT_DYNCREATE是为了“动态创建”类的实例而定义的宏。new可以用来创建对象,但不是动态的。比如说,你要在程序中实现根据用户输入的类名来创建类的实例:

 char szClassName[];
cin >> szClassName;
CObject *pOb = new szClassName; //错误

这里就要用到DECLARE_DYNCREATE和IMPLEMENT_DYNCREATE。

②DECLARE_MESSAGE_MAP(),消息映射声明,有了这个之后这个类才能接收系统消息,这个可是Windows核心之一^_^

③消息声明,这里采用OnChar函数,可采用的按顺序发生的有OnKeyDown()、OnChar()、OnKeyUp(),在这个函数里面控制键盘按下之后的处理,我这里是要输入十六进制字符,使用第一个参数UINT nChar控制输入,同时还要考虑空格键和删除键。

④stdafx.h:标准系统包含文件和经常使用但不经常变化的项目特定包含文件的包含文件,这些文件用于生成预编译头文件 Projname.pch 和预编译类型文件 Stdafx.obj。

所谓头文件预编译就是把一个工程中使用的一些MFC标准头文件(如windows.h、Afxwin.h)预先编译,以后该工程编译时,不再编译这部分头文件,仅仅使用预编译的结果。这样可以加快编译速度,节省时间。

1、所有MFC实现文件都有#include “stdafx.h”

2、#include “stdafx.h”必须添加到.cpp文件的第一行

自定义Edit控件控制输入范围的更多相关文章

  1. 【aardio】如何让edit控件只能输入数字、小数点及 - 号

    import win.ui; /*DSG{{*/ var winform = win.form(parent=...; text="aardio Form";right=349;b ...

  2. VC++6.0/MFC中如何限制Edit控件输入 例子,只能输入0和1

    1.Insert -> New Class -> 在Base Class中选择CEdit,在Name中输入CMyEdit. 2.在左边的ClassView中,右键击CMyEdit,选择Ad ...

  3. Vue input 控件: 通过自定义指令(directive)使用正则表达式限制input控件的输入

    前言: 网站中的input输入框使用非常广泛,因业务场景不同需要对输入框做合法性校验或限制输入,比如电话号码.邮件.区号.身份证号等.input框的不合法内容主要有两种方式处理:1.用户输入内容后,通 ...

  4. 2018-8-10-win10-uwp-验证输入-自定义用户控件

    title author date CreateTime categories win10 uwp 验证输入 自定义用户控件 lindexi 2018-08-10 19:16:51 +0800 201 ...

  5. asp.net中自定义验证控件

    在windows2003中,可能iis版本太底,不支持TextBox的类型设为Number类型,所以会报错,所以去掉后直接用验证控件来控制必须输入数字好了. <asp:RegularExpres ...

  6. C#自定义ip控件

    前言:由于项目中有ip输入,但C#中又没有IP控件,如果直接放4个TextBox感觉又怎么好,还不好控制,于是可以通过自定义控件的方式来解决,就又了下面的自定义ip控件,该控件功能基本完善,如果还有未 ...

  7. VC中edit控件使用

    SetSel(start,end)作用:定制EDIT的所选择内容.间接地可以用于定位光标位置. 使用例子:EXP1:设置光标CEdit*      pEdit=(CEdit*)GetDlgItem(I ...

  8. 【Android开发日记】之入门篇(十四)——Button控件+自定义Button控件

        好久不见,又是一个新的学期开始了,为什么我感觉好惆怅啊!这一周也发生了不少事情,节假日放了三天的假(好久没有这么悠闲过了),实习公司那边被组长半强制性的要求去解决一个后台登陆的问题,结果就是把 ...

  9. 使用前端开发工具包WijmoJS - 创建自定义DropDownTree控件(包含源代码)

    概述 最近,有客户向我们请求开发一个前端下拉控件,需求是显示了一个列表,其中包含可由用户单独选择的项目控件,该控件将在下拉列表中显示多选TreeView(树形图). 如今WijmoJS已经实现了该控件 ...

随机推荐

  1. 关于sql 外键的讨论。

    外键是否采用看业务应用场景,以及开发成本的,大致列下什么时候适合,什么时候不适合使用: 1. 互联网行业应用不推荐使用外键: 用户量大,并发度高,为此数据库服务器很容易成为性能瓶颈,尤其受IO能力限制 ...

  2. JFrame??

    swing的三个基本构造块:标签.按钮.文本字段.但需要个地方安放他们,并希望用户如何处理他们.JFrame类就是解决这个问题————它是一个容器,允许程序员把其他组件添加到它里面,把它们组织起来,并 ...

  3. 请简述javascript的数据类型种类?

    答案: javascript里的数据类型分为基本数据类型 和 引用数据类型两种, 其中, 基本数据类型包括5个:数值,字符串,布尔,null, undefined 引用数据类型包括3个:array,f ...

  4. 转载 java枚举类型enum的使用 (原文地址:http://blog.csdn.net/wgw335363240/article/details/6359614)

    java枚举类型enum的使用 最近跟同事讨论问题的时候,突然同事提到我们为什么java中定义的常量值不采用enmu枚举类型,而采用public final static 类型来定义呢?以前我们都是采 ...

  5. jQuery无缝滚动向上

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. js自定义类和对象及继承

    1.工厂方式 <script type="text/javascript"> function createObject(name){ var p = new Obje ...

  7. GetLastError来获得错误信息转成文本描述

    我们一般在调用了一些API后都会用GetLastError来获得错误信息,但是信息都是Integer的,我们知道是什么意思么?嘿嘿,是的,有msdn呀,当然还可以用FormatMessage函数来.正 ...

  8. css案例学习之盒子模型

    定义:每个盒子都有:边界.边框.填充.内容四个属性: 每个属性都包括四个部分:上.右.下.左:这四部分可同时设置,也可分别设置:里的抗震辅料厚度,而边框有大小和颜色之分,我们又可以理解为生活中所见盒子 ...

  9. 如何去除List中的重复值?

    今天碰到一个问题,已经有一个List<string>,里面有重复值,希望将重复值去掉,同时不能破坏现有的顺序. 感谢 http://bbs.csdn.net/topics/39024721 ...

  10. java常量池理解

    String类两种不同的创建方式 String s1 = "zheng"; //第一种创建方式 String s2 = new String("junxiang" ...