关于Attach
<P>代码: dc.Attach (lpdis->hDC) MSDN里说是将句柄与对象连接起来,有的地方说就是把句柄转换为对象等的说法,<BR>究竟是什么,还是云里雾里啊?<BR>void CMainFrame::OnDrawItem (int nIDCtl, LPDRAWITEMSTRUCT lpdis)<BR>{<BR> BITMAP bm;<BR> CBitmap bitmap;<BR> bitmap.LoadOEMBitmap (OBM_CHECK); <BR> bitmap.GetObject (sizeof (bm), &bm);<BR> <BR> CDC dc;<BR> dc.Attach (lpdis->hDC);</P><P> CBrush* pBrush = new CBrush (::GetSysColor ((lpdis->itemState &<BR> ODS_SELECTED) ? COLOR_HIGHLIGHT : COLOR_MENU));<BR> dc.FrameRect (&(lpdis->rcItem), pBrush);<BR> delete pBrush;</P>
<P> if (lpdis->itemState & ODS_CHECKED) {<BR> CDC dcMem;<BR> dcMem.CreateCompatibleDC (&dc);<BR> CBitmap* pOldBitmap = dcMem.SelectObject (&bitmap);</P>
<P> dc.BitBlt (lpdis->rcItem.left + 4, lpdis->rcItem.top +<BR> (((lpdis->rcItem.bottom - lpdis->rcItem.top) -<BR> bm.bmHeight) / 2), bm.bmWidth, bm.bmHeight, &dcMem,<BR> 0, 0, SRCCOPY);</P>
<P> dcMem.SelectObject (pOldBitmap);<BR> }</P>
<P> UINT itemID = lpdis->itemID & 0xFFFF; // Fix for Win95/98 bug<BR> pBrush = new CBrush (m_wndView.m_clrColors[itemID - ID_COLOR_RED]);<BR> CRect rect = lpdis->rcItem;<BR> rect.DeflateRect (6, 4);<BR> rect.left += bm.bmWidth;<BR> dc.FillRect (rect, pBrush);<BR> delete pBrush;</P>
<P> dc.Detach ();<BR>}<BR></P>
页:
[1]
