Sasha
3/29/2005 5:18:00 PM
#ifndef WS_EX_LAYERED
#define WS_EX_LAYERED 0x00080000
#define LWA_COLORKEY 0x00000001
#define LWA_ALPHA 0x00000002
#endif // WS_EX_LAYERED
class CTransparentWindow : public CWindow
{
public:
CTransparentWindow(HWND hWnd = NULL) : CWindow(hWnd)
{
}
CTransparentWindow& operator=(HWND hWnd)
{
m_hWnd = hWnd;
return *this;
}
BOOL SetLayeredWindowAttributes(COLORREF crKey, BYTE bAlpha, DWORD
dwFlags)
{
ATLASSERT(::IsWindow(m_hWnd));
typedef BOOL (WINAPI *PFNSETLAYEREDWINDOWATTRIBUTES)(HWND, COLORREF,
BYTE, DWORD);
PFNSETLAYEREDWINDOWATTRIBUTES pfnSetLayeredWindowAttributes =
(PFNSETLAYEREDWINDOWATTRIBUTES) ::GetProcAddress(
::GetModuleHandle(_T("user32.dll")), "SetLayeredWindowAttributes");
if( pfnSetLayeredWindowAttributes == NULL ) return FALSE;
return pfnSetLayeredWindowAttributes(m_hWnd, crKey, bAlpha, dwFlags);
}
BOOL UpdateLayeredWindow(HDC hdcDst, POINT *pptDst, SIZE *psize, HDC
hdcSrc, POINT *pptSrc, COLORREF crKey, BLENDFUNCTION *pblend, DWORD dwFlags)
{
ATLASSERT(::IsWindow(m_hWnd));
typedef BOOL (WINAPI *PFNUPDATELAYEREDWINDOW)(HWND, HDC, POINT*,
SIZE*, HDC, POINT*, COLORREF, BLENDFUNCTION*, DWORD);
PFNUPDATELAYEREDWINDOW pfnUpdateLayeredWindow =
(PFNUPDATELAYEREDWINDOW) ::GetProcAddress(
::GetModuleHandle(_T("user32.dll")), "UpdateLayeredWindow");
if( pfnUpdateLayeredWindow == NULL ) return FALSE;
return pfnUpdateLayeredWindow(m_hWnd, hdcDst, pptDst, psize, hdcSrc,
pptSrc, crKey, pblend, dwFlags);
}
};