窗口子类一些有用的操作

文章讲述了在编程中如何处理多个窗口的消息回调函数,通过窗口子类化技术使用SetWindowLong函数改变窗口的回调函数。作者最初遇到的问题是直接使用类内函数导致类型转换无效,后来发现给回调函数添加static关键字可以实现每个窗口独特的实现,而无需为每个窗口创建单独的窗口类,从而降低了bug率。
摘要由CSDN通过智能技术生成

窗口子类就是利用        SetWindowLong 函数   使用 GWL_WNDPROC 标志 将窗口绑定的窗口类的回调函数进行改变  (WNDCLASS -> lpfnWndProc   ),实际上就是函数指针  它所指向 (存储) 的函数地址 被改变了。

上调用代码:

 图中划红线的部分就是传递  LRESULT CALLBACK 类型的回调函数的地址  是不是感觉有点疑问,为什么不直接写这个类里的函数呢?

一开始我也是直接写进去,类型一值是无效转换,没办法了我才这样变相的传递过来。(实际上是有方法的我后面会说到)

但是后面我遇到了多窗口,每个窗口都有不一样的实现,这就意味着我要写很多个消息回调函数,但是窗口类我用的就是一个啊,这就意味着他们一定要过一个消息回调函数,我必须得采用窗口子类或者改变他们的回调函数。

为每一个窗口都创建一个窗口类?自然不太现实,毕竟写得多,回调函数都写得头大,还要写着玩意  bug率会极度上升。

解决方案来了:

 为函数加上       static  关键字就可以了。    

之前也是脑子抽了,想了很多,没想到这,我一直想都是地址,你讲个无效转换? 赶紧转换》》》

应该是类对象需要实例化才会分配内存,而        static  是编译完成时 启动项目时就直接有了一个固定内存且 与项目同生共死( 不消毁) 符合操作系统回调什么的  瞎猜的 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值