透明,半透明窗体

来源:互联网 发布:深圳警察知乎 编辑:程序博客网 时间:2024/05/16 11:32

 首先,用生成向导建立个基于对话框的程序框架,取名为PartTransparent

    第二,重写BOOL CPartTransparentDlg::OnInitDialog(),也就是重写,对话框类的OnInitDialog()这个函数,在里面,return TRUE;前面加入下面的代码:

 

SetWindowLong(GetSafeHwnd()

                      ,GWL_EXSTYLE

                      ,GetWindowLong(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);
}

 

SetLayeredWindowAttributes函数:
hwnd是透明窗体的句柄,
crKey为颜色值,
bAlpha是透明度,取值范围是[0,255],
dwFlags是透明方式,可以取两个值:
         当取值为LWA_ALPHA时,crKey参数无效,bAlpha参数有效;
         当取值为LWA_COLORKEY时,bAlpha参数有效而窗体中的所有颜色为crKey的地方将变为透明。
        LWA_ALPHA = 0x2        LWA_COLORKEY=0x1
     要使使窗体拥有透明效果,首先要有WS_EX_LAYERED扩展属性 (旧的sdk没有定义这个属性,所以可以直接指定为0x80000). WS_EX_LAYERED = 0x80000
原创粉丝点击