【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文章源码下载


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值