//自定义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. 使用html,JavaScript,ajax写一个小型实例

    //1.创建受捐单位数组 var arrOrgData = [     { "Id": 1, "OrgName": "红十字会" },    ...

  2. javascript中数组方法小计

    一:数组的常用方法: 1:join(); 将数组转为字符串显示.不输入参数,默认以逗号连接:输入参数,则以参数连接. var arr=[1,2,3]; console.log(arr.join()); ...

  3. django是怎么处理请求的

    本文摘自 http://djangobook.py3k.cn/2.0/chapter03/ 我们在Django建立helloworld自定义页面中新建了站点,并能接受URL请求展示我们的页面,那Dja ...

  4. wampserver配置memcache

    我用的环境是win7 64位的操作系统,wampserver也是64位,版本是2.5的,其中带的php版本是5.5的. 配置memcache的步骤: 第一步,先下载memcahed.exe和php_m ...

  5. shell提示符显示git当前分支

    编辑/etc/profile或者~/.bashrc 在行末添加如下内容 # 获取git当前分支 git_branch() { branch='' cd $PWD if [ -d '.git' ]; t ...

  6. DNS解析服务使用的系统对网站的安全起着很重要的作用

    1 采用独享的DNS服务器解析系统 DNS解析服务使用的系统对网站的安全极其重要.现在国内的DNS服务器普遍是公用的,即是你的企业网站DNS解析服务和其他许多网站都是由同一个DNS服务器提供.一旦某个 ...

  7. Jupyter Notebook通过latex输出pdf

    主要步骤 1.将ipynb编译成tex ipython nbconvert --to latex Example.ipynb 2. 修改tex,增加中文支持 在\documentclass{artic ...

  8. php set env

    SYSTEM WARNING: 'date_default_timezone_get(): It is not safe to rely on the system's timezone settin ...

  9. jquery第四期:对象转换的小实例

    为了更清晰的看懂jquery对象是一个数组,我们这一期来改变每一个<li>中的值,在前面加上序号. 代码如下: <!DOCTYPE html PUBLIC "-//W3C/ ...

  10. DrawText的使用

    DrawText函数简介 这个函数的作用非常easy,就是在指定的区域内输出格式化的文本. 函数原型: int DrawText( HDC hDC, LPCTSTR lpString, int nCo ...