windows核心编程<读书笔记一>---重写Onchar函数
来源:互联网 发布:软件企业认证要求 编辑:程序博客网 时间:2024/05/17 02:10
【文起】:蟹儿的爱是我坚持的动力,为了你和我们的幸福
第一章中,书上有一个程序用例,在一个Edit中输入错误码ID,另一个Edit中显示错误码描述。自己写完发现错误码ID能输入所有的字符,这显然是不对的,就想到了去限制只能输入数字和delete。
MFC中可以通过设置Eidt属性为NUM解决。但是我想到如果要求可以输入小数点或者负号呢?在网上搜了下,看到了MFC子类化。这儿只说如何实现,不深究原理。
一:
新增一个MFC类,CEdit_NUMONLY,继承之CEdit。给类CEdit_NUMONLY添加WM_CHAR消息处理,于是有了函数
void CEdit_NUMONLY::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
二:
在用到需要限制对话框的类中,添加 CEdit_NUMONLY m_editNumOnly; 然后在初始化对话框时,调用子类化函数。
即在函数
BOOL CErrorShowDlg::OnInitDialog(){ /* 省略系统默认生成的代码 */m_editNumOnly.SubclassDlgItem(IDC_EDIT_ERRCODE,this);return TRUE; // 除非将焦点设置到控件,否则返回 TRUE}
三:
重写OnChar函数:
1、如果传入的字符是0-9或者是delete(注意这儿跟模拟键盘中不一样,delete是VK_BACK而非VK_DELETE),那么就正常处理;
2、如果传入的是回车,那么获取ErrCodeID,调用FormatMessage函数取得错误码描述;
3、如果是其他的,提示输入必须是数字。
代码如下:
void CEdit_NUMONLY::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags){// TODO: 在此添加消息处理程序代码和/或调用默认值if ((nChar <= '9' && nChar >= '0') || (VK_BACK == nChar) ){CEdit::OnChar(nChar, nRepCnt, nFlags);}else if (VK_RETURN == nChar){int i_errcode = GetDlgItemInt(IDC_EDIT_ERRCODE);LPWSTR lp_buffer;BOOL bOK;bOK = FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM|FORMAT_MESSAGE_ALLOCATE_BUFFER,NULL,i_errcode,MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED),lp_buffer,0,NULL);if (bOK){ SetDlgItemText(IDC_EDIT_ERR,lp_buffer);}else{ SetDlgItemText(IDC_EDIT_ERR,_T("Err code is wrong"));}}else{AfxMessageBox(_T("只能输入数字"));}}
四:
OnChar函数是系统在KeyUp只前和KeyDown之后调用的,所以还有一种方法是在KeyDown中做限制,原理雷同,不多说。
如果以上内容对你有用了,请留下对我和蟹儿的祝福。谢谢~~
- windows核心编程<读书笔记一>---重写Onchar函数
- windows核心编程读书笔记一
- 《Windows核心编程》读书笔记(一)
- Windows核心编程<读书笔记十四>虚拟内存一
- 《Windows核心编程》读书笔记一 错误处理
- Windows核心编程读书笔记
- Windows 核心编程读书笔记
- Windows核心编程读书笔记
- Windows 核心编程 -- 读书笔记
- windows核心编程读书笔记
- 《Windows核心编程》读书笔记
- 《Windows核心编程》读书笔记
- 【读书笔记】Windows核心编程
- 【读书笔记】windows核心编程
- Windows核心 读书笔记(一)
- 创建进程CreateProcess函数---------《windows核心编程》读书笔记(3)
- 《Windows核心编程》读书笔记(四)
- 《Windows核心编程》读书笔记 (五)
- 解决Android 电子市场 下载,安装时出现“下载XXX出错。设备空间不足”的问题
- 一个简单的C++延迟调用系统
- 本地套接字示例[来源:Advanced Linux Programming]
- joj1889
- JNDI的实现
- windows核心编程<读书笔记一>---重写Onchar函数
- 本人多年经验总结关于网页制作的十大禁忌
- Window.ShowModalDialog 页面的传值
- Android RIL 架构学习总结
- isupper <ctype.h> <cctype>
- 软件架构模式
- FOJ 1879 Air Strike
- android textview中超出屏幕宽度的字符 省略号显示
- 对于中国移动wap2.0业务开发的建议