Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1676038
  • 博文数量: 585
  • 博客积分: 14610
  • 博客等级: 上将
  • 技术积分: 7402
  • 用 户 组: 普通用户
  • 注册时间: 2008-05-15 10:52
文章存档

2013年(5)

2012年(214)

2011年(56)

2010年(66)

2009年(44)

2008年(200)

分类: C/C++

2011-09-17 16:03:01


可以利用Windows系统提供的SetLayeredWindowAttributes函数设置透明度和不透明的颜色关键值。
BOOL SetLayeredWindowAttributes(
 HWND hwnd, //分层窗口句柄
 COLORREF crKey, //颜色关键值
 BYTE bAlpha, //描述不透明的程度,0表示全透明,255表示完全不透明
 DWORD dwFlags //明确采取的动作
);
dwflags的值:
LWA_COLORKEY 使用crKey为透明值
LWA_ALPHA    使用bAlpha为窗口的不透明值

 

具体实现:

新建一个对话框程序,在上面添加一个滑动条和一个文本框,利用类向导为滑动条添加一个关联变量m_slide,并为其添加一个相应函数OnReleasedcaptureSlider1。

代码如下:

在OnInitDialog()函数中添加如下代码:

//设置窗体大小位置不可变
 ::SetWindowPos(m_hWnd,HWND_TOPMOST,0,0,0,0,SWP_NOSIZE | SWP_NOMOVE);
 m_slide.SetRange(10,255); //设置滑动条的范围
 m_slide.SetPos(128);  //设置初始滑动位置
 SetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE,GetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE)^0x80000);
 HINSTANCE hInst=LoadLibrary("User32.DLL");//显示加载DLL
 if(hInst)
 {
  typedef BOOL (WINAPI*MYFUNC)(HWND,COLORREF,BYTE,DWORD);
  MYFUNC fun=NULL;
  //取得SetLayeredWindowAttributes函数指针,该函数控制透明度
  fun=(MYFUNC)GetProcAddress(hInst,"SetLayeredWindowAttributes");
  if(fun)
   fun(this->GetSafeHwnd(),0,128,2);
  FreeLibrary(hInst);
 }

 

在OnReleasedcaptureSlider1函数中添加如下代码:

void CTranswinDlg::OnReleasedcaptureSlider1(NMHDR* pNMHDR, LRESULT* pResult)
{
 // TODO: Add your control notification handler code here
 BYTE eff=(BYTE)m_slide.GetPos();//得到滑动条位置
 HINSTANCE hInst=LoadLibrary("User32.DLL");//显示加载DLL
 if(hInst)
 {
  typedef BOOL (WINAPI*MYFUNC)(HWND,COLORREF,BYTE,DWORD);
  MYFUNC fun=NULL;
  //取得SetLayeredWindowAttributes函数指针,该函数控制透明度
  fun=(MYFUNC)GetProcAddress(hInst,"SetLayeredWindowAttributes");
  if(fun)
   fun(this->GetSafeHwnd(),0,eff,2);
  FreeLibrary(hInst);
 }
 CString str;
 str.Format("%d",100*eff/255);
 GetDlgItem(IDC_EDIT1)->SetWindowText(str);
 *pResult = 0;
}

阅读(977) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~