-

- 加为好友
- 发送私信
- 在线聊天
|
| 发表于:2008-01-12 17:01:27 楼主 |
请大家告诉我问题出在哪儿?一个pDC、一个pMyDC、一个成员变量m_pFillDC,三个dc中贴图,当执行第二个Bitblt时贴图位置不对, 需要刷新一次才能正确显示, void CDisplayView::OnDraw(CDC* pDC) { GetClientRect(&rect); CDC *pMyDC = new CDC(); CBitmap bitmap; pMyDC->CreateCompatibleDC(pDC); ASSERT(pMyDC->m_hDC != NULL); bitmap.CreateCompatibleBitmap(pDC, rect.Width(),rect.Height()); m_pOldBmp = pMyDC->SelectObject(&bitmap); ASSERT(pMyDC->m_hDC!=NULL); pMyDC->SetMapMode(pDC->GetMapMode()); pDC->DPtoLP(&rect); pMyDC->SetWindowOrg(rect.left, rect.top); pMyDC->FillSolidRect(rect, pDC->GetBkColor()); if(m_bFill) FillDC(pMyDC);//在这函数里对m_pFillMemDC进行绘图 pMyDC->BitBlt(rect.left, rect.top, rect.Width(), rect.Height(), m_pFillDC, rect.left, rect.top, SRCCOPY); DrawOthers(pMyDC, pDoc); pDC->BitBlt(rect.left, rect.top, rect.Width(), rect.Height(), pMyDC, rect.left, rect.top, SRCCOPY); delete pMyDC; pMyDC = NULL; } void CDisplayView::FillDC(CDC *pTempDC) { COtdrDoc *pDoc; pDoc = (COtdrDoc *)GetDocument(); ASSERT_VALID(pDoc); GetClientRect(&m_LgRect); CBitmap bitmap; ASSERT(m_pFillDC != NULL); if(m_pFillDC->GetSafeHdc()) m_pFillDC->DeleteDC(); m_pFillDC->CreateCompatibleDC(pTempDC); ASSERT(m_pFillDC->m_hDC != NULL); bitmap.CreateCompatibleBitmap(pTempDC, m_LgRect.Width(),m_LgRect.Height()); m_pOldBmp = m_pFillDC->SelectObject(&bitmap); ASSERT(m_pFillDC->m_hDC!=NULL); m_pFillDC->SetMapMode(pTempDC->GetMapMode()); pTempDC->DPtoLP(&m_LgRect); m_pFillDC->SetWindowOrg(m_LgRect.left, m_LgRect.top); m_pFillDC->FillSolidRect(m_LgRect, pTempDC->GetBkColor()); DrawBKGrid(pDoc, m_pFillDC); DrawLine(pDoc, m_pFillDC); DrawFlag(pDoc, m_pFillDC, pTempDC); } |
|
|
|
20
修改
删除
举报
引用
回复
| |