【VC编程技巧】控件?4.2自定义EDIT(只限字母字符输入)

4.2自定义EDIT

自定义button,自定义editbox可以使button和editbox更符合自己的需求。请看下面示例:只限字母字符输入的editbox建立。

1.了解函数CWnd::SubclassDlgItem

BOOL SubclassDlgItem(
   UINT nID,
   CWnd* pParent
);

说明:调用这个函数可以“动态子类化”从对话框模板中创建出来的控件;并且将控件绑定在CWnd对象上。

参数:

nID   控件的ID
pParent  控件父层(一般是对话框)

返回值:如果函数成功,返回非0;否侧,返回0;

备注:

当一个控件被“动态子类化”时,Windows消息将会绕行CWnd的消息映射,并且windows消息会首先在CWnd类中被调。传给基类的消息默认会传给控件。

这个函数绑定windows控件到CWnd对象中,并且替代了控件的WndPro和AfxWndPro函数。这个函数

2.在对话框中创建ID:IDC_EIDT1的editbox控件

图1

3通过类向导,创建基于CEdit的CLimitEditBox类

图2

4.在CLimitEditBox类中添加WM_CHAR消息函数,在WM_CHAR消息函数中添加去除非字母字符,并将小写字母转成大写的处理。

void CLimitEditBox::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
	// TODO:
    //判断nChar是否为字母
	if (::IsCharAlpha((TCHAR)nChar))
	{
		//转换为大写字母
		nChar=(UINT)::CharUpper((LPTSTR)nChar);
		//通过DefWindowProc函数调用默认的消息处理函数
		DefWindowProc(WM_CHAR, nChar, MAKELPARAM(nRepCnt, nFlags));
	}
	//注释掉
	//CEdit::OnChar(nChar, nRepCnt, nFlags);
}

5.通过函数CWnd::SubclassDlgItem将控件IDC_EDIT1绑定到CWnd类对象中(在BOOL CLimitEditDlg::OnInitDialog())

	// TODO: 在此添加额外的初始化代码

	m_limitEditBox.SubclassDlgItem(IDC_EDIT1, this);

	return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE

6.最终效果图

P.S下载工程源码(VS2012)

时间: 2024-09-29 00:40:44

【VC编程技巧】控件?4.2自定义EDIT(只限字母字符输入)的相关文章

【VC编程技巧】窗体?3.5对单文档或者多文档程序制作启动画面

(一)概要: 文章描述了怎样通过Visual C++ 2012或者Visual C++ .NET,为单文档或者多文档程序制作启动画面.在Microsoft Visual Studio 6.0中对于单文档程序(SDI)我们可以很方便利用微软提供的组件Visual C++ Component (Splash Screen).因为在Microsoft Visual Studio 6.0以后的版本或者Visual C++ .NET没有提供这个组件,我们可以通过自定义对话框来实现Splash Screen

【VC编程技巧】窗体?3.7托盘程序介绍(模拟QQ消息)

所谓的托盘程序就是运行时在系统托盘区(就是桌面右下角显示时间的区域)出现一个小图标的程序.代表它运行的图标称作托盘图标.我们可以通过使用小图标来控制应用程序的状态. (一)NOTIFYICONDATA Structure typedef struct _NOTIFYICONDATA { DWORDcbSize;//结构体大小 HWNDhWnd;//接受icon消息的窗口句柄 UINT uID;//icon图标的资源Id UINTuFlags;//标志一些成员是否有效 UINTuCallbackM

【VC编程技巧】窗体?3.4利用bitmap改变对话框的背景。

效果图: 代码: 1.在对话框初始化函数OnInitDialog中加载bitmap,然后创建新的画刷. // CBitmapDemoDlg メッセージ ハンドラー BOOL CBitmapDemoDlg::OnInitDialog() { CDialogEx::OnInitDialog(); // "バージョン情報..." メニューをシステム メニューに追加します. // IDM_ABOUTBOX は.システム コマンドの範囲内になければなりません. ASSERT((IDM_ABOUT

CAD控件使用教程 自定义实体的实现

自定义实体的实现 1 .       自定义实体... 3 1.1      说明... 3 1.2      类的类型信息... 3 1.3      worldDraw.. 4 1.4      getGripPoints 4 1.5      moveGripPointsAt 5 1.6      getGeomExtents 6 1.7      getOsnapPoints 6 1.8      explode. 7 1.9      dwgInFields 8 1.10    dwg

VC/MFC ListCtrl 控件功能使用汇总(转)

以下未经说明,listctrl默认view 风格为report 相关类及处理函数 MFC:CListCtrl类 SDK:以 "ListView_"开头的一些宏.如 ListView_InsertColumn -------------------------------------------------------------------------------- 1. CListCtrl 风格      LVS_ICON: 为每个item显示大图标      LVS_SMALLIC

Android界面编程——对话框控件(四)

Android界面编程--对话框控件 2.5对话框控件 对话框是提示用户作出决定或输入额外信息的小窗口.对话框不会填充屏幕,通常用于需要用户采取行动才能继续执行的模式事件.Android中常见跟对话框相关控件有Toast.AlertDialog.PopupWindow.ProgressDialog等 2.5.1 Toast Toast用于弹出一个简单文本信息为应用提供反馈,可以和当前活动保持可见和互动,在一定时间后自动消失.Toast有两种形式基本Toast和自定义Toast,效果如图2.5.1

VC++编写ActiveX控件

ActiveX这门技术是通过生成“*.ocx”文件来实现的.先来了解下OCX文件,在百度百科上面对OCX是这样解释的:“.ocx是ocx控件的扩展名,OCX 是对象类别扩充组件.如果你用过Visual Basic或者Delphi一类的可视化编程工具,那么对控件这个概念一定不会陌生,就是那些工具条上的小按钮,如 EditBox,Grid,ImageBox,Timer等等.每个控件都有自己的事件.方法和属性.使用了控件的编程非常容易.首先,在程序的设计阶段可以设置一些属性,如大小,位置,标题(cap

VC++使用ActiveX控件连接和操作数据库

VS2008运用ActiveX控件连接和操作数据库关闭时一直有个内存释放的错误,好像使用VC6.0会多生成2个文件,就不会有问题. VC++使用ActiveX控件连接和操作数据库的方法分两种: 1.通过属性窗口连接数据库2.通过代码连接数据库 1.通过属性窗口连接数据库基本步骤:(1)创建一个基于对话框的应用程序ActiveXDB; (2)添加CAdodc控件:对话框上右键单击,选择Insert ActiveX control菜单项,弹出的对话框中选择Microsoft ADO Data Con

VC++ 使用WebBrowser控件中html文件以资源形式加载

1 . . . . 2 3 //加载资源文件中的HTML,IDR_HTML1就是HTML文件在资源文件中的ID 4 wchar_t self_path[MAX_PATH] = { 0 }; 5 GetModuleFileName(NULL, self_path, MAX_PATH); 6 CString res_url; 7 res_url.Format(L"res://%s/%d", self_path, IDR_HTML1); 8 m_webbrowser.Navigate(res