最近项目软件需要制作半透明窗口,但控件不能透明。窗口和控件都是自绘的。
网上大部分例子都是直接设置窗口透明度实现,这样只能让整个窗口透明,达不到我们想要的效果。
经研究发现,需要使用父子两个窗口配合制作,父窗口不能在OnPaint那里自绘,
而是直接GetDC得到句柄自绘背景,子窗口负责自绘控件。
关键代码:
父窗口
OnInitDialog()
{
m_dlg.Create(m_hWnd);
m_dlg.ShowWindow(SW_SHOW);
m_dlg.MoveWindow(&rct);
HDC hDC =::GetDC(m_hWnd);
BLENDFUNCTION blend;
blend.BlendOp=0; //theonlyBlendOpdefinedinWindows2000
blend.BlendFlags=0; //nothingelseisspecial...
blend.AlphaFormat=1; //...
blend.SourceConstantAlpha=255;//AC_SRC_ALPHA
DWORD dwExStyle=::GetWindowLong(m_hWnd,GWL_EXSTYLE);
::SetWindowLong(m_hWnd,GWL_EXSTYLE,dwExStyle^0x80000);
HDC hMemDc;
hMemDc=CreateCompatibleDC(hDC);
HBITMAP hBitMap=CreateCompatibleBitmap(hDC,500,500);
SelectObject(hMemDc,hBitMap);
转自: