最近项目软件需要制作半透明窗口,但控件不能透明。窗口和控件都是自绘的。
网上大部分例子都是直接设置窗口透明度实现,这样只能让整个窗口透明,达不到我们想要的效果。
经研究发现,需要使用父子两个窗口配合制作,父窗口不能在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); }
转自: www.pailm.com
原文:http://www.cnblogs.com/haha457/p/4287230.html