工控编程吧

标题: 上位机MFC玻璃窗体效果源代码 [打印本页]

作者: qq263946146    时间: 2019-7-15 13:09
标题: 上位机MFC玻璃窗体效果源代码
程序的界面设计现在基本上有贴图和程序绘制(包括GDI,GDI+,GDK+等),
前者界面成型快,开发起来比较简单,但是界面比较死板。
后者开发起来比较复杂,都是像素级别的程序绘制,需要的计算机图形学知识比较多,
开发周期很长,但是开发出来的UI非常的耐用,动态效果基本上是想得到就做得到。

言归正传,这次的玻璃界面还是运用了GDI+的图形绘制库,载入带有透明通道的窗体界面图片,
图片的类型是PNG的,再运用UpdateLayeredWindow这个API进行透明通道的绘制。
下面是这个API的详细参数:

UpdateLayeredWindow(hwnd:HWND; // 窗口句柄
            hdcDst:HDC; // 目标 DC
            ptDst:pPoint; // 目标的 TopLeft
            Size:pSize; // 显示 Size
            hdcSrc:HDC; // 源 DC
            ptSrc:pPoint; // 源 DC 的 TopLeft
            crKey:COLORREF; // 透明颜色值
            Blend:pBlendFunction; // Alpha 混合函数
            dwFlagsWord // 一组标志位常量
            );

  
运用这个API结合GDI+来绘制不规则窗体的实例代码上网有很多,在这里就不多说了。我们主要说明一下运用这种方法出现的一种情况,
就是窗体界面上面拖放什么控件,都无法显示出来,但是,控件能够很好的响应事件。
  
刚遇到这个问题,我也头疼了很长时间,
但是,今天想出个比较笨的方法,但也根本的解决了这个问题,就是运用控件响应事件来运用GDI+绘制图片,
模仿控件(这种方法适用于按钮类控件)。
  
对于非按钮类控件,就只能用双窗体联动的形式解决了,
第一个窗体作为渲染透明效果的载体,第二个窗体为无边框类型,覆盖于第一个窗体之上,
随第一个窗体移动,这个窗体作为所有控件的载体。




效果如图
(, 下载次数: 0)