博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
自绘对话框标题栏
阅读量:2393 次
发布时间:2019-05-10

本文共 2228 字,大约阅读时间需要 7 分钟。

      本例中将涉及到对话框标题栏的自绘,双缓冲位图的显示以及位图按钮类的使用。

 

1. 标题栏自绘

 

      在网上搜索了很多关于标题栏自绘的例子,但是大都存在很多的问题,多是没有自绘彻底,比如出现闪烁,会出现默认风格最大化等按钮的显示,不过其中有份代码处理的比较好,至于出于什么地方想不起来了,下面会一并给出源代码(源代码的下载地址在评论部分给出 ),本例是在这份源代码的基础上作的改进,主要有以下几个方面:

(1)标题栏添加了颜色渐变的效果,使之看上去有立体感,其实就是在绘制位图资源时填充渐变色而已;
(2)当我们点击最大化,最小化或关闭按钮的时候,只有当左键弹起时才能起效;
(3)当窗口失去焦点时,标题栏应有对应的反映,即改变标题文字和最大化等按钮的颜色;
(4)使用了CToolTipCtrl控件,实现了当我们将鼠标放到最大化等按钮上时,显示文字提示;
(5)可以设置对话框标题栏的左上角和右上角是以圆角显示还是以直角显示,调用SetTitleRectStyle方法即可实现;
(6)使用FrameRect函数绘制了对话框的边线;
(7)对原有的代码做了一些简化的处理;
(8)将对话类封装了一下,即CColorTitleDlg,要实现多个该风格的对话框,只需继承该对话框类即可。

 

2. 双缓冲显示位图

 

      双缓冲显示位图的原理网上介绍的比较多,主要思路如下:

本例中的CTestBitmapShowDlg主测试类中位图的显示,以及CColorTitleDlg标题栏重绘类中标题栏的贴图操作都是使用双缓冲来实现,以避免界面的闪烁。

3. 位图按钮类的使用

 

       本例中对CTestBitmapShowDlg主测试类中的按钮进行了美化处理,使用了CBitmapBtn按钮位图类,事先用photoshop为每个按钮绘制四种不同状态的位图,即正常状态,鼠标选中状态,按下鼠标状态和非使用状态,为了达到立体感的效果,需要使用到photoshop中的渐变色处理。CBitmapBtn按钮位图类的使用方法:首先将定义按钮对应的控件变量,然后将绘制的bitmap图片导入到工程中,调用CBitmapBtn按钮位图类的SetBitmap方法将按钮图片与按钮关联起来,如下所示:

 

4. 存在的不足

 

       当对话框比较大时,我们将鼠标移到标题栏按下左键拖动对话框,向下拖动标题栏不会闪烁,但向上拖动时标题栏会闪烁,这点尚需讨论和改进。

5. 结束语 

 

      正如上面所说,关于标题栏自绘的问题问的比较多,而网络上给出的例子大都存在问题,所以在此将我处理过的代码拿出来与大家分享一下,相互学习,希望大家批评指正!另外,这是本人第一次发博,希望大家支持一下!谢谢!

 

 

PS:对话框标题栏自绘效果如下图所示: (下图是窗口失去焦点时的情况)

 

 

 

转载地址:http://oghab.baihongyu.com/

你可能感兴趣的文章
java中File类的获取功能和修改名字功能
查看>>
java中File类的其它获取功能
查看>>
java输出指定目录下所有的java文件名(包含子目录)
查看>>
java中的字符流
查看>>
java中的字节流
查看>>
java中IO流中的标准输入输出流
查看>>
java中IO流中的转换流
查看>>
java中IO流中的 打印流
查看>>
java中IO流中的对象操作流
查看>>
java中IO流中的对象操作流(2)——解决对象输入流读取对象出现异常的问题
查看>>
java中IO流Properties集合
查看>>
java中的常用编码表
查看>>
java中IO流字符流中的编码
查看>>
java中多线程概述
查看>>
java中兩種实现线程的方式
查看>>
java中多线程安全问题产生&解决方案——同步代码块
查看>>
ServletContextListener监听器,HttpSession监听器,ServletRequestListener监听器的使用
查看>>
Filter过滤器的使用
查看>>
文件上传的概述
查看>>
文件上传的步骤
查看>>