编程论坛's Archiver

axxiao 发表于 2007-11-21 11:47

关于Attach

<P>代码: dc.Attach (lpdis-&gt;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), &amp;bm);<BR>    <BR>    CDC dc;<BR>    dc.Attach (lpdis-&gt;hDC);</P>
<P>    CBrush* pBrush = new CBrush (::GetSysColor ((lpdis-&gt;itemState &amp;<BR>        ODS_SELECTED) ? COLOR_HIGHLIGHT : COLOR_MENU));<BR>    dc.FrameRect (&amp;(lpdis-&gt;rcItem), pBrush);<BR>    delete pBrush;</P>
<P>    if (lpdis-&gt;itemState &amp; ODS_CHECKED) {<BR>        CDC dcMem;<BR>        dcMem.CreateCompatibleDC (&amp;dc);<BR>        CBitmap* pOldBitmap = dcMem.SelectObject (&amp;bitmap);</P>
<P>        dc.BitBlt (lpdis-&gt;rcItem.left + 4, lpdis-&gt;rcItem.top +<BR>            (((lpdis-&gt;rcItem.bottom - lpdis-&gt;rcItem.top) -<BR>            bm.bmHeight) / 2), bm.bmWidth, bm.bmHeight, &amp;dcMem,<BR>            0, 0, SRCCOPY);</P>
<P>        dcMem.SelectObject (pOldBitmap);<BR>    }</P>
<P>    UINT itemID = lpdis-&gt;itemID &amp; 0xFFFF; // Fix for Win95/98 bug<BR>    pBrush = new CBrush (m_wndView.m_clrColors[itemID - ID_COLOR_RED]);<BR>    CRect rect = lpdis-&gt;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]

Powered by Discuz! Archiver 6.1.0  © 2001-2007 Comsenz Inc.