c# 重绘事件 关于OnPaint事件
我在OnPaint事件里面改变了滚动条和列表框的样式,但是在按下鼠标左键后又会显示系统样式,请问我该用什么方法才能改变鼠标按下后的样式?...
我在OnPaint事件里面改变了滚动条和列表框的样式,但是在按下鼠标左键后又会显示系统样式,请问我该用什么方法才能改变鼠标按下后的样式?
展开
- 你的回答被采纳后将获得:
- 系统奖励15(财富值+成长值)+难题奖励10(财富值+成长值)+提问者悬赏10(财富值+成长值)
展开全部
问题说清楚,哪个控件的 OnPaint 事件?继承重写的还是单纯的事件绑定?
更多追问追答
追问
checkedlistbox和listview 重写
追答
Winform 这两个控件(或者说几乎所有带滚动条的控件)都比较蛋疼,滚动条的绘制其实是由系统完成的而不是 OnPaint 事件完成的,OnPaint 事件实际上只能重绘控件的非滚动条的部分。这个时候如果有滚动条话还是被系统自己绘制了的,只不过被你重绘的部分“挡住”了而已。
但如果出现鼠标点击事件,就有点儿麻烦了,因为这个时候系统是先处理滚动条这个需要被重绘的部分的,导致系统绘制的这部分又把你重绘的部分“挡住”了。
说的有点儿乱,不知道题主理解没有。
所以这几个带滚动条的控件要想重绘滚动条,有两种方式。一是重绘 HScrollBar 或 VScroolBar 这两个控件(或者干脆自己写一个滚动条控件),然后屏蔽掉原本控件的滚动条,让 HScrollBar、VScroolBar 跟你的控件联动。二是重写控件接管其消息处理函数(也就是重写 WndProc 方法),拦截掉系统发出的重绘滚动条的消息,改成显示自己要的样式。
两者说到底吧,都是一个比一个麻烦(题主可以搜到很多 VC++ 关于这个蛋疼的滚动条重绘的方法的,都是拦截系统消息,C# 的资料较少)。这有一篇资料是用的第一种方法:http://www.csharpwin.com/csharpspace/3633r5162.shtml。相比较而言还是 WPF 重绘轻松加愉快啊……
至于题主说的列表框的样式也显示成系统样式我就不太清楚了,请贴关键代码。
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询