让Static控件活起来(转载)
来源:互联网 发布:口琴调压音软件 编辑:程序博客网 时间:2024/06/03 15:00
让Static控件活起来
很多天没更新了,实在惭愧。这些天有些懒,而且还养成了睡午觉的坏习惯,而且一睡还是一下午……
好,先把那事暂搁一边,之后会加快更新频率的。这次给大家介绍一下,怎样让Static控件支持响应鼠标消息。static控件包括static文本控件、picture控件等(其他的,比如组框控件,与之差不多,就不介绍了)。
最终效果如下:
(文后附有demo源码)
static控件默认是不支持响应鼠标消息的,如果把其ID从IDC_STATIC改成其他的,可见其可以响应BN_CLICKED消息,但这远远不够。但是MS也没有把路堵死,我们可以利用SetWindowLong,动态增加 其SS_NOTIFY风格,使其支持鼠标响应。
1、不重载CStatic,使静态文本控件支持鼠标消息的办法
当然,也可以不关联CStatic的成员变量,直接GetDlgItem是一样的。
对其添加消息响应,以双击为例:
分别添加
2、为实现更强大的功能,最好的办法是重载CStatic类。这里以CHyperLinker类为例,给大家讲讲实现方法
增加SS_NOTIFY属性方法类似,可以在PreSubClass中完成, 这里代码略去
实现滑过效果、点击效果(颜色变化等效果),主要是在对应消息响应函数中调用Invalidate, 在CtlColor实现重画。
在CtlColor(注意响应的是WM_CTLCOLOR_REFLECT)里面无非是对各种状态的判断,并SetTextColor等而已
再重点介绍一下响应鼠标滑动消息。先看一下代码:
C瓜哥
适当修改了一下原作者的代码,被注释掉的代码是赘余代码。他用的点在区域里面的判断函数PtInRect来判断鼠标进入与移出控件窗口区域。其实也可以用分发WM_MOUSEHOVER、WM_MOUSELEAVE的办法实现。(具体实现办法,请参看C瓜哥的前几篇重绘按钮、文本框的文章)
这里有个细节一定要注意,就是一定要用鼠标捕获(SetCapture、RealeaseCapture)的办法实现。默认只会响应响应鼠标在控件区域内的MouseMove情况,移出之后就失效了。所以在进入其中时,就SetCapture,使控件一直捕获鼠标消息,等到鼠标移出之后,再ReleaseCapture,停止捕获。这样就能够弥补这个缺陷了!
单击事件中就主要调用ShellExcute函数和Invalidate了一下,比较简单,这里略去。
C瓜哥把单击事件中的直接ShellExcute,变成判断m_sURL是否为空。这样就可在在主窗口类中也单独对其添加事件响应!
————————–
附件下载
Static_test.rar
- 让Static控件活起来(转载)
- 让Static控件活起来
- 让控件闪亮起来
- 让lable控件闪烁起来
- 让网站活起来
- 让ubuntu小键盘灯亮起来【转载】
- 让项目计划“活”起来
- [转载]myApps柔性定制平台让流程管理“灵动”起来
- iOS开发系列--让你的应用“动”起来【转载】
- 自绘控件开发探索2-让view动起来
- 曾经的 Java IDE 王者 Eclipse 真的没落了?21 款插件让它强大起来!(转载)
- 让你的对象活起来
- 让你的设备活起来!
- 如何让你的网站活起来?
- 4 让战机动起来(一)
- 初学unity(让场景动起来)
- opengles(四)让图像动起来
- Qt笔记(8)自定义控件 三 让使用了自定义控件的工程运行起来
- HTTP POST GET 本质区别详解
- hadoop snapshot 备份恢复
- python入门学习笔记
- js 数组去重
- mongoDB的基本操作之数据删除
- 让Static控件活起来(转载)
- 《暗时间》
- 栈的顺序存储
- 过滤器(filter)和拦截器(intercept)的区别
- CountDownLatchDemo 闭锁,线程池使用例子
- .NET调用百度天气api经验
- x86+NFV 中国电信成功构建中国首个IP智能管道
- DTP模型及中间件的作用
- Redis笔记(三)添加密码并修改默认端口后的主从同步