深入理解MFC子类化(一)
来源:互联网 发布:大数据架构详解 pdf 编辑:程序博客网 时间:2024/05/20 16:12
子类化,通俗来讲就是用自己的窗口处理函数来处理特定消息,并将自己其他消息还给标准(默认)窗口处理函数。在SDK中,通过SetWindowLong来指定一个自定义窗口处理函数:SetWindowLong(hwnd, GWL_WNDPROC, (LONG)UserWndProc);。可是到了MFC中,大部分基础的东西都被封装起来了,那么,这是该怎么实现子类化呢?
先来看一个例子:
要求:定义一个Edit控件,让它能够对输入进行特定的处理输入进行处理-----只能输入英文字母,对其他输入作出提示。
分析:1)处理输入当然是响应WM_CHAR消息了,然后对输入字符进行判断,并做相应处理。那么,我们有怎么才能让Edit自己处理输入呢?
2)我们知道Windows为我们设计Edit控件时,已经将常用操作通过成员函数的形式封装在CEdit类中了,直接由CEdit生成的对象自己并不能改变原有方法或是定制自己的方法(除了虚函数,但有时我们想实现的并不是虚函数啊!),那么现在想达到这些情况应该怎么办呢?这就用到本篇文章的主题-----MFC子类化。
3)我们可以从CEdit类派生一个新类CSuperEdit,然后通过子类化方法是Edit窗口来使用我们指定的消息处理函数。
实现:先CSuperEdit,并为其添加WM_CHAR消息响应函数,这样CSuperEdit对象就拥有了自己WM_CHAR响应函数(这正是子类化的效果所在----面向对象----自己的方法封装在自己的类中),然后在其父窗口类(这里我们用一个基于对话框的MFC程序)中声明一个CSuperEdit类对象m_edit,当然m_edit需要和一个实际存在的窗口关联起来,因此,在CXXXDialog::OnInitDialogj中添加:m_edit.SubclassDlgItem(IDC_EDIT1,this);这样
就将m_edit这个c++对象和IDC_EDIT1窗口关联起来了,然后我们只需要在CSuperEdit::OnChar()中添加相应的操作就OK了。
原理探讨:见(二
先来看一个例子:
要求:定义一个Edit控件,让它能够对输入进行特定的处理输入进行处理-----只能输入英文字母,对其他输入作出提示。
分析:1)处理输入当然是响应WM_CHAR消息了,然后对输入字符进行判断,并做相应处理。那么,我们有怎么才能让Edit自己处理输入呢?
2)我们知道Windows为我们设计Edit控件时,已经将常用操作通过成员函数的形式封装在CEdit类中了,直接由CEdit生成的对象自己并不能改变原有方法或是定制自己的方法(除了虚函数,但有时我们想实现的并不是虚函数啊!),那么现在想达到这些情况应该怎么办呢?这就用到本篇文章的主题-----MFC子类化。
3)我们可以从CEdit类派生一个新类CSuperEdit,然后通过子类化方法是Edit窗口来使用我们指定的消息处理函数。
实现:先CSuperEdit,并为其添加WM_CHAR消息响应函数,这样CSuperEdit对象就拥有了自己WM_CHAR响应函数(这正是子类化的效果所在----面向对象----自己的方法封装在自己的类中),然后在其父窗口类(这里我们用一个基于对话框的MFC程序)中声明一个CSuperEdit类对象m_edit,当然m_edit需要和一个实际存在的窗口关联起来,因此,在CXXXDialog::On
就将m_edit这个c++对象和IDC_EDIT1窗口关联起来了,然后我们只需要在CSuperEdit::On
原理探讨:见(二
- 深入理解MFC子类化(一)
- 深入理解MFC子类化(二)
- 深入理解MFC子类化
- 深入理解MFC子类化
- 深入理解MFC子类化
- 深入理解MFC子类化
- MFC子类化
- MFC窗口子类化
- MFC-- 子类化控件
- 浅谈mfc子类化
- MFC子类化控件
- 深入理解REST(一)
- 深入理解字符串(一)
- 深入理解缓冲区(一)
- 《深入理解计算机系统》(一)
- GCD 深入理解(一)
- GCD 深入理解(一)
- GCD 深入理解(一)
- 第十三周任务(二)
- /usr/local/apache2/modules/libphp5.so cannot restore segment prot after reloc: Permission denied
- oracle 查询N秒之前的数据
- 常用正则表达式符号及其含义
- PhoneGap开发手机程序入门教程
- 深入理解MFC子类化(一)
- HDU2196
- windows版本的Emacs 无法显示图片的解决方法
- 不多事了。交叉编译的问题小结
- 此外 1.1 还包含了如下重大的变更
- 详解Android中AsyncTask的使用
- 264,avs中Skip宏块与Direct预测模式 ,对称模式的区别
- 深入理解MFC子类化(二)
- http协议和web本质