//自定义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. hdu1711Number Sequence

    Problem Description Given two sequences of numbers : a[1], a[2], ...... , a[N], and b[1], b[2], .... ...

  2. js中添加事件 attachEvent 与 addEventListener

    给元素添加事件时,使用js进行实现时产生了疑惑,有关事件浏览器兼容的问题,在此记录如下. <!DOCTYPE html> <html> <head> <met ...

  3. poj 3411 Paid Roads

    题意:有m条路,n座城市,走这些路是要付费的,每条路由两种付费方案,设一条路两端是a,b,如果走完这条路在b点付费的话,应付r,如果走这条路之前在c点付费的话,应付p,求从1端点走到n端点的最小费用. ...

  4. 《C++ Primer Plus 6th》读书笔记 - 第十章 对象和类

    1. 过程性编程和面向对象编程 2. 抽象和类 1. 使用类对象的程序都可以直接访问公有部分,但只能通过公有成员函数(或友元函数)来访问对象的私有成员 2. 可以在类声明之外定义成员函数,并使其成为内 ...

  5. Nginx提示502和504错误的终极解决方案

    将脚本添加至计划任务: /usr/local/php/sbin/php-fpm reload   直接在crontab里写入php-fpm的平滑重启命令,"平滑重启"和" ...

  6. JDK常见问题 环境变量配置

    "javac不是内部命令或外部命令" Windows7 安装"jdk-6u26-windows-x64.exe"后,常提示"javac不是内部命令或外 ...

  7. 汽车总线obd模拟器,obd仿真器,ecu模拟器,obd开发测试工具,可以模拟ecu中的obd协议 MRD-5050

    汽车总线OBD模拟器MRD-5050型号是在车辆越来越趋于网络化的趋势下研发的,是汽车产品开发.调试.生产必备的工具,能为为开发人员节省大量的时间.当前车辆上的总线设备越来越多,有的高端车上甚至多到有 ...

  8. poj2864

    #include<iostream> #include<cstdio> #include<cmath> using namespace std; int main ...

  9. ASP.NET repeater添加序号列的方法

    ASP.NET repeater添加序号列的方法 1.<itemtemplate> <tr><td> <%# Container.ItemIndex + 1% ...

  10. skiing(搜索+记忆化搜索)

    skiing 时间限制:3000 ms  |  内存限制:65535 KB 难度:5   描述 Michael喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜,而且当 ...