QQ登录

只需一步,快速开始

41上位机VC MFC实现任意透明度的窗口

[ 复制链接 ]

41上位机VC MFC实现任意透明度的窗口

41上位机VC MFC实现任意透明度的窗口

41上位机VC MFC实现任意透明度的窗口



功能展示

有时我们自己编写的上位机程序在弹出提示信息窗口后,想实现像QQ一样,逐渐透明地退出提示窗口,给自己的程序增添点特效。如何实现这一功能呢?我们当前这一例程就来实现这一功能,效果如图
要点提示
要想实现窗口具有透明的效果,首先这个窗口得具有0X80000的扩展风格,这是第一步。然后调用User32动态库中的SetLayeredWindowAttributes函数设置半透明窗体;在Visual C++中, SetLayeredWindowAttributes()这个函数没有被直接封装,所以我们得自己手动从User32中动态地导入;
第一用SetWindowLong()设置窗口0X80000的扩展风格: SetWindowLong(hwnd, GWL_EXSTYLE,GetWindowLong(m_hWnd, GWL_EXSTYLE) | 0X80000);函数语法为LONG SetWindowLong( HWND hWnd, // handle of window int nIndex, // offset of value to set LONG dwNewLong // new value ); hWnd为窗口句柄; nIndex表示修改窗口哪一个,我们当前实现修改窗口扩展风格,所以设为GWL_EXSTYLE; dwNewLong 表示新窗口特征;
BOOL SetLayeredWindowAttributes(
HWND hwnd, // 指定分层窗口句柄
COLORREF crKey, // 指定需要透明的背景颜色值,可用RGB()宏
BYTE bAlpha, // 设置透明度,0表示完全透明,255表示不透明
DWORD dwFlags // 透明方式
);
其中,dwFlags参数可取以下值:
LWA_ALPHA时:crKey参数无效,bAlpha参数有效;
LWA_COLORKEY:窗体中的所有颜色为crKey的地方将变为透明,bAlpha参数无效。其常量值为1。
LWA_ALPHA | LWA_COLORKEY:crKey的地方将变为全透明,而其它地方根据bAlpha参数确定透明度。
实现功能
1.新建基于对话框的应用程序

2.直接自定义一个函数实现窗口透明效果
  1. BOOL CGkbc8Dlg::SetLayeredWindowAttributes(HWND hwnd,COLORREF crKey,BYTE bAlpha,DWORD dwFlags)
  2. {
  3.         SetWindowLong(hwnd, GWL_EXSTYLE, GetWindowLong(m_hWnd, GWL_EXSTYLE) | 0X80000);
  4.         
  5.         LAYERFUNC SetLayer;
  6.         HMODULE hmod = LoadLibrary("user32.dll");
  7.         SetLayer=(LAYERFUNC)GetProcAddress(hmod,"SetLayeredWindowAttributes");
  8.         BOOL bReturn = SetLayer(hwnd,crKey,bAlpha,dwFlags);
  9.         FreeLibrary(hmod);
  10.         return bReturn;
  11. }
复制代码
3.添加个变量  UINT m_nAlpha;初始化为m_nAlpha = 255;并设置一个定时器来逐渐透明窗口SetTimer(1,500,NULL);
  1. void CGkbc8Dlg::OnTimer(UINT nIDEvent)
  2. {
  3.         if(1==nIDEvent)
  4.         {
  5.                 SetLayeredWindowAttributes(m_hWnd,RGB(0,0,0),m_nAlpha,2);
  6.                 m_nAlpha-=10;
  7.                 if(m_nAlpha<100)
  8.                 {
  9.                         m_nAlpha=255;
  10.                 }
  11.         }
  12.         CDialog::OnTimer(nIDEvent);
  13. }
复制代码



上面函数为定时器的代码

我们来演示下功能实现的整个过程
源码及视频下载
(仅在电脑可见)

请点击此处下载

请先注册会员后在进行下载

已注册会员,请先登录后下载

文件名称:41.上位机VC MFC实现任意透明度的窗口.rar 
文件大小:122.26 KB  售价:10金币
下载权限: 不限 以上或 VIP会员   [购买捐助会员]   [充值积分]   有问题联系我

  

您的支持是我们创作的动力!  

  

您可花点闲钱积分自助任意充值

  

成为VIP会员 全站资源任意下载永久更新!

回复

使用道具 举报

快速回复 返回列表 客服中心 搜索