猎豹MFC--拦截消息SetWindowsLong CallWindowsProc控件不能满足我们的需求时 增加修改这些功能

修改现有控件的功能->子类化技术
只能输入字符 而不能输入别的类型----------------拦截消息
两个函数SetwindowsLong()
CallWindowsProc()
  下面的  小控件都是 一个小窗口

是窗口就有自己的窗口过程,可以给其一个新的额窗口过程把原来的窗口过程替换掉,用新窗口过程处理他的消息 ,即把原来的消息拦截下来,用新的窗口过程来处理

修改ID后添加C++的类:



在新类中声明函数


在主文件中包含新类的头文件 和声明全局变量:

在初始化对话框中 把新窗口(即文本框)句柄和类关联起来:

定义新的变量和声明窗口过程:格式为windows要求


实现新Attach函数:

定义新窗口过程属性 常量:



新的窗口过程转去调用旧的窗口过程:

下面是拦截消息:


增加  删除消息:

增加新声明的一个函数:
实现该函数:

小数点处理:

负号处理:


增加健壮性 如果没有转去调用默认的窗口过程“:

只能输入数组 负号 小数点  其他的均不能输入:
双击 读取按钮:

增加一个成员函数:

实现该函数:

因为出错了  所以  修改函数为如下:

在 按钮双击后的处理函数中  如下”:

增加取消函数声明:

把文本框的窗口过程 换成旧的窗口过程

在析构中调用:

法二  在对话框销毁时调用:“








posted @ 2016-03-20 17:37  hungryvampire  阅读(782)  评论(0编辑  收藏  举报