QQ登录

只需一步,快速开始

窗口透明度任意控制--上位机VC

[ 复制链接 ]

窗口透明度任意控制--上位机VC

窗口透明度任意控制--上位机VC

窗口透明度任意控制--上位机VC
功能展示
窗口透明可以美化程序界面,但VC6.0中微软没有开放出透明度设置函数,我们当前例程通过动态加载User32.DLL库,调用窗口透明度设置函数,实现窗口透明度的任意设置,效果如图。程序运行初始化设置窗口透明度为128,及滑块控件的位置,用户拖动滑块可任意设置窗口的透明度
要点提示
SetLayeredWindowAttributes()可以设置窗口的透明度,在User32.DLL库里实现,但并未在VC6.0中开放使用。例程通过动态调用库HINSTANCE hInst = LoadLibrary(“User32.DLL”); 获取库的实例。
再通过函数GetProcAddress(hInst,“SetLayeredWindowAttributes”);获得窗口透明度设置函数,就可以进一步设置窗口透明度;
下面是SetLayeredWindowAttributes函数的介绍
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参数确定透明度。
要使使窗体拥有透明效果,首先要有WS_EX_LAYERED扩展属性,方法可以在CreateWindowEx时指定,也可以SetWindowLong动态设置。如下代码可设置分层窗口:


SetWindowLong(m_hWnd, GWL_EXSTYLE, GetWindowLong(m_hWnd,GWL_EXSTYLE) |= WS_EX_LAYERED);
实现功能
1.新建基于对话框的应用程序
2.拖拽一滑块控件IDC_SLIDER1,用于控制透明度, 再一进度条控件IDC_PROGRESS1,用于显示透明度,再添加些控件作为点缀;

3.在程序初始化时初始化控件及窗口透明度
  1. CProgressCtrl* pProgress = (CProgressCtrl*)GetDlgItem(IDC_PROGRESS1);
  2.         pProgress->SetRange(0,255);
  3.         pProgress->SetPos(128);
  4.         CSliderCtrl* pSlider = (CSliderCtrl*)GetDlgItem(IDC_SLIDER1);
  5.         pSlider->SetRange(0,255);//设置调节范围为透明度范围
  6.         pSlider->SetPos(128);//设置位置
  7.         //透明窗口需有0x80000风格
  8.         SetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE,        GetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE)^0x80000);
  9.         HINSTANCE hInst = LoadLibrary("User32.DLL");
  10.         if(hInst) //调用User32.DLL库中 SetLayeredWindowAttributes函数,设置窗口透明度
  11.         {            
  12.                 typedef BOOL (WINAPI *MYFUNC)(HWND,COLORREF,BYTE,DWORD);         
  13.                 MYFUNC fun = NULL;
  14.                 //取得SetLayeredWindowAttributes函数指针     
  15.                 fun=(MYFUNC)GetProcAddress(hInst, "SetLayeredWindowAttributes");
  16.                 if(fun)
  17.                         fun(this->GetSafeHwnd(),0,128,2);     
  18.                 FreeLibrary(hInst);
  19.         }
复制代码
4.添加OnHScroll()水平滚动函数,在内部实现滑块滚动,设置窗口透明度功能
  1. void CGkbc8Dlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
  2. {
  3.         CSliderCtrl* pSlider = (CSliderCtrl*)GetDlgItem(IDC_SLIDER1);
  4.         if(pScrollBar->m_hWnd == pSlider->m_hWnd)
  5.         {
  6.                 int nPos = pSlider->GetPos();
  7.                 HINSTANCE hInst = LoadLibrary("User32.DLL");
  8.                 if(hInst)
  9.                 {            
  10.                         typedef BOOL (WINAPI *MYFUNC)(HWND,COLORREF,BYTE,DWORD);         
  11.                         MYFUNC fun = NULL;   
  12.                         fun=(MYFUNC)GetProcAddress(hInst, "SetLayeredWindowAttributes");
  13.                         if(fun)
  14.                                 fun(this->GetSafeHwnd(),0,nPos,2);     
  15.                         FreeLibrary(hInst);
  16.                 };       
  17.                 CProgressCtrl* pProgress = (CProgressCtrl*)GetDlgItem(IDC_PROGRESS1);
  18.                 pProgress->SetPos(nPos);
  19.         }
  20.         CDialog::OnHScroll(nSBCode, nPos, pScrollBar);
  21. }
复制代码
我们来演示下功能实现的整个过程
请点击此处下载

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

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

文件名称:窗口透明度任意控制--上位机VC.txt 
文件大小:31 Bytes  售价:10金币
下载权限: 不限 以上或 VIP会员   [购买捐助会员]   [充值积分]   有问题联系我

  

如果您认可,可联系功能定制!

  

如果您着急,充值会员可直接联系发您资料!

  

QQ联系我

微信扫扫联系我

  

回复

使用道具 举报

点击查看
快速回复 返回列表 客服中心 搜索