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