我想将一个对话框设置成透明的   且可以调节透明度
在程序中用SetLayeredWindowAttributes()  用一个CSlider  来控制其透明度
可是当我滑动滑块时 有时他会根据实际透明度值来调节  但有时  却变得完全不透明    
设置透明的函数void CzzszDlg::SetTouMing(void)
{
#define WS_EX_LAYERED 0x00080000 
COLORREF maskColor=RGB(0,0,0);
CString fileName=this->m_strCur+_T("\\shezhi.ini");
int pos=::GetPrivateProfileIntW(_T("常规"),_T("透明度"),0,fileName);
SetWindowLong(this->GetSafeHwnd(), GWL_EXSTYLE, GetWindowLong(GetSafeHwnd(), GWL_EXSTYLE^WS_EX_LAYERED); 
  //调用SetLayeredWinowAttributes函数
pos=255-255*pos/100;
SetLayeredWindowAttributes(maskColor,pos,2); 
}

解决方案 »

  1.   

    我在另一个函数里面改透明度  在讲改变的值放入ini 文件  然后再在那里调用此函数
    void CWaiGuanDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
    {
    // TODO: 在此添加消息处理程序代码和/或调用默认值
    CWnd* pClider=this->GetDlgItem(IDC_TOUMINGDU);
    if(pClider==pScrollBar)
    {
    CString strFileName=m_pDlg->m_strCur+_T("\\shezhi.ini");
    int pos=this->m_CtrTouMingDu.GetPos();
    CString tem;
    tem.Format(_T("%d%%"),pos);
    GetDlgItem(IDC_STATIC2)->SetWindowTextW(tem); tem.Format(_T("%d"),pos);
    ::WritePrivateProfileStringW(_T("常规"),_T("透明度"),tem,strFileName); m_pDlg->SetTouMing(); } CDialog::OnHScroll(nSBCode, nPos, pScrollBar);
    }
      

  2.   

    首先,用生成向导建立个基于对话框的程序框架,取名为PartTransparent  第二,重写BOOL CPartTransparentDlg::OnInitDialog(),也就是重写,对话框类的OnInitDialog()这个函数,在里面,return TRUE;前面加入下面的代码:  SetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE,GetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE)^0x80000);
    HINSTANCE hInst = LoadLibrary("User32.DLL");
    if (hInst)
    {
      typedef BOOL (WINAPI * MYFUNC)(HWND,COLORREF,BYTE,DWORD);
      MYFUNC fun = NULL;  fun = (MYFUNC)GetProcAddress(hInst,"SetLayeredWindowAttributes");
      if (fun)
      fun(this->GetSafeHwnd(),0,128,2);
      FreeLibrary(hInst);
       
    }其中fun(this->GetSafeHwnd(),0,128,2);修改窗口的透明度,值越接近255越不透明。
      

  3.   

    我是想动态改变透明度  通过一个CSlider控件改变的
    程序每次启动时是按正确的值设置的 
    但是当滑动滑块时  他有时是按正确的值设置透明度  但有时是完全不透明的  不确定 
    我不知道这是怎么回事
      

  4.   

    stevenuserregister我用你的代码也一样
      

  5.   

    我在滑块处理函数中两次调用
         m_pDlg->SetTouMing();但是在滑动滑块的过程中 透明度不是连续变化的 一闪一闪的,松开时就正常了…
    很郁闷