Win32汇编---控件的超类化感想

 

对于窗口的子类化相信大家并不陌生:基于某一个控件功能,用窗口子类化来实现我们想要的功能!由于控件的封装,我们无法对它进行直接操作修改,但是我们可以截获windows给控件过程发送的消息,从而达到控制控件窗口的目的!对于单个控件的子类化,并不费事,但是我们如果要注册多个这样的控件就麻烦了,于是产生了超类化的思想。

可以用GetClassInfoEx()来获取现存类的属性,然后修改结构的内容,就可以派生出一个功能不同的类!如下面一段代码:

基于Edit类的NewEdit类就产生了,其中_ProcEdit子程序是NewEdit类的过程函数。这不禁让我想到当初创建windows窗口的时候,每次都要注册一次WNDCLASSEX结构体函数,下面使我们非常熟悉的代码:

这岂不也是对于窗口的“子类化”吗?我们可以自定义窗口的背景颜色,光标位图以及主窗口图标!然后调用CreateWindowEx来创建,我想窗口超类化的思想和这里肯定也有些未知的联系(不知道我的思考对不对)!当然也可以在RC文件中用我们超类化好的“NewEdit”,下面是一段演示代码,是针对进制转化超类化出来的,控件中只能输入0~9以及A~F,并自动把小写字母大写,资源文件的定义如下:

汇编源代码如下:

这中间我也学到了很多,老早就从Zoologist的文章中了解到如何去用Spy++去查看窗口属性,以及怎么去截获窗口消息。今天用了下,明白了窗口一些基本的属性,以及看到别的程序一些不知道的风格可以去“截取”,而不必打开MSDN,啃着枯燥的英文!突然想到的一点就是有些程序当光标放在BUTTON上面就变成一个手型,很好奇。通过Spy++研究到可以截获WM_MOUSEMOVE消息来了解光标的活动范围,然后用API函数SetCursor来改变光标形状!这个我没有实验过,感觉中不能实现光标的持续性停留变化。还有一招就是调用API函数SetClassLong,利用GCL_HCURSOR参数来“永久改变”,但后再改回来!麻烦了些,具体还没有实验,调研中……

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值