最近在弄一个仿Win7的半透明窗口。用的透明窗口风格WS_EX_LAYERED ,然后通过UpdateLayeredWindow 函数对窗口皮肤已经按钮图像进行贴图,所谓的按钮并非控件,而是通过判断区域来模拟的按钮响应。
浪费了一番功夫趋近完成之后结果很不满意,原因是窗口随便一个变化都得重新绘制一下整个窗口和窗口上所有的按钮,导致CPU扛不住!难道就如他们所说“漂亮是要付出代价的”? 我想不一定吧!突然觉得这个思路做主窗口完全不行,做小点的提示框什么的倒还可以。
大家愿意关心的希望能提出宝贵的意见,假如能不改变整体思路的同时能解决性能上的问题那更好~小弟先在此谢谢了!
下面是效果图和源代码下载地址:
http://download.csdn.net/detail/zh359780498/3938368
假如在主窗口上创建另外一个弹出对话框专门放CButton控件,这样背景和控件可以分开来进行绘制,也许能解决性能上的问题。
为什么我要这样麻烦而不用CButton控件,原因就是按钮控件通过响应多种状态进行图片绘制的时候只要后面绘制的图像不能完全遮盖住上一次状态所绘制图像时,未遮盖的部分就会残留下来,我想这是因为窗口重画只是直接在原来的绘制的图像上再进行绘制。
假如是用带半透明的PNG图像通过GDI+绘制会出现背景色,这是为什么?
绘制透明按钮有种说法是先获取按钮区域屏幕的图像作为按钮底图,然后在这底图上进行绘制从而达到透明效果,但是
我不知道在什么时候获取这个图才能是背景图?我获取的总是按钮自身的图像。
假如按钮上一层窗口是半透明状态还能顺利获取?
有没有方法让控件重画之前清除掉上一次所画的东西,这点要是能办到所有问题应该都解决了。
网上搜索了好多类似的提问,都没有满意的答案。
学习MFC快1年了,知道csdn1年了,这是第一次在csdn提问,一直都是给别人捧场!希望运气不是那么坏能有高人帮忙解答!