有时候为了制作透明的控件,特别是外边缘不规则的控件,可将控件背后的窗口图片复制到控件中,重绘.这样控件看起来就象透明的.

.h文件中声明变量CMemoryDCm_EmptyMemDC;//空白内存DC(另外封装的CDC的类)CBitmapm_BmpBackground;voidCLabel::CopyBackground(CDC*pDC){CRecttheRt;//获取控件大小(此处是自定义的控件,在控件内部执行)GetWindowRect(&theRt);CPointpt(theRt.left,theRt.top);::ScreenToClient(GetParent()->m_hWnd,&pt);CClientDCclientDC(this->GetParent());//创建兼容位图m_BmpBackground.CreateCompatibleBitmap(&clientDC,m_rect.Width(),m_rect.Height());HBITMAPhOldBitmap=(HBITMAP)m_EmptyMemDC.SelectObject(&m_BmpBackground);::StretchBlt(m_EmptyMemDC,0,0,theRt.Width(),theRt.Height(),clientDC.m_hDC,pt.x,pt.y,theRt.Width(),theRt.Height(),SRCCOPY);pDC->BitBlt(0,0,m_rect.Width(),m_rect.Height(),&m_EmptyMemDC,0,0,SRCCOPY);m_EmptyMemDC.SelectObject(hOldBitmap);m_BmpBackground.DeleteObject();}