有时候为了制作透明的控件,特别是外边缘不规则的控件,可将控件背后的窗口图片复制到控件中,重绘。这样控件看起来就象透明的。
. h文件中声明变量 CMemoryDC , m_EmptyMemDC;//空白内存直流(另外封装的疾病预防控制中心的类) cbitmap,,, m_BmpBackground; void CLabel: CopyBackground (CDC *, pDC) { CRect theRt;//获取控件大小(此处是自定义的控件,在控件内部执行) GetWindowRect(及theRt); CPoint pt (theRt.left, theRt.top); ::ScreenToClient (GetParent ()→m_hWnd,和pt); CClientDC , clientDC(这→GetParent ()); ,,//创建兼容位图 m_BmpBackground.CreateCompatibleBitmap(及clientDC, m_rect.Width (),, m_rect.Height ()); HBITMAP hOldBitmap =, (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 (); }