天天看點

透明,半透明窗體

 首先,用生成向導建立個基于對話框的程式架構,取名為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

透明,半透明窗體