void CEx_DrawView::OnDraw(CDC* pDC) { // TODO: add draw code for native data here CEx_DrawDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); m_bufferDC.BitBlt(0, 0, m_size.cx, m_size.cy, pDC, 0, 0, WHITENESS); DrawGraphic(&m_bufferDC); if (pDoc->m_sel != -1) { ASSERT(pDoc->m_sel >= 0 && pDoc->m_sel < pDoc->m_obArray.GetSize()); CGraphic* P = Convert_To_Graphic(pDoc->m_obArray[pDoc->m_sel]); ASSERT_VALID(P); P->Draw(&m_bufferDC); m_bufferDC.SelectObject(GetStockObject(WHITE_BRUSH)); P->DrawSelectedEdge(&m_bufferDC); if (pDoc->m_bShowTab) { CString str; int bkMode = m_bufferDC.SetBkMode(TRANSPARENT); str.Format(_T("%d"), pDoc->m_sel); m_bufferDC.SelectObject(&m_tabFont); m_bufferDC.TextOut(P->m_pt1.x, P->m_pt1.y, str); } } pDC->BitBlt(0, 0, m_size.cx, m_size.cy, &m_bufferDC, 0, 0, SRCCOPY); }
void CEx_DrawView::DrawGraphic( CDC* pDC, int skip /*= -1*/ ) { CEx_DrawDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); CString str; BOOL bShowHidden = pDoc->m_bShowHidden; for (int i = 0; i < pDoc->m_obArray.GetSize(); i++) { CGraphic* p = Convert_To_Graphic(pDoc->m_obArray[i]); if (i == skip || (!bShowHidden && p->m_bHidden)) { continue; } p->Draw(pDC); if (pDoc->m_bShowTab) GraphicDrawTab(pDC, p, i); } }
void CEx_DrawView::OnMouseMove(UINT nFlags, CPoint point) { // TODO: Add your message handler code here and/or call default CEx_DrawDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); m_ptLocalScroll = GetScrollPosition(); CPoint ptLocal = point + m_ptLocalScroll; if (m_bLButtonDown) { CClientDC dc(this); switch (pDoc->m_GM.m_DrawType) { case SELECT: if (m_pMoveTarget) { if (m_bFirstMove && m_bLButtonDown) { if (m_bCtrlDown && !m_bSizingMode) { static GraphicMember GM; m_pMoveTarget->UpdateData(&GM, FALSE); m_pMoveTarget = CGraphic::CreateGraphic(&GM); m_pMoveTarget->m_lpszName.Format(_T("%s_%d"), m_pMoveTarget->GetName(), ++pDoc->m_createID); pDoc->WriteLog(CGraphicLog::GOS_ADD, m_pMoveTarget, pDoc->m_obArray.GetSize()); pDoc->m_sel = pDoc->m_obArray.GetSize() - 1; pDoc->UpdateAllViews(NULL, 0x4000); pDoc->UpdateAllViews(NULL, 0x4001); m_bDup = TRUE; } m_backDC.BitBlt(0, 0, m_size.cx, m_size.cy, NULL, 0, 0, WHITENESS); DrawGraphic(&m_backDC, pDoc->m_sel); } static CPoint offset; offset = point; offset -= m_ptOriginHit; if (m_bSizingMode) { if (m_sizingX) *m_sizingX = ptLocal.x; if (m_sizingY) *m_sizingY = ptLocal.y; } else { m_pMoveTarget->m_pt1 = m_ptCurTarget1 + offset; m_pMoveTarget->m_pt2 = m_ptCurTarget2 + offset; } m_bufferDC.BitBlt(0, 0, m_size.cx, m_size.cy, NULL, 0, 0, WHITENESS); m_bufferDC.BitBlt(0, 0, m_size.cx, m_size.cy, &m_backDC, 0, 0, SRCCOPY); m_pMoveTarget->Draw(&m_bufferDC); m_bufferDC.SelectObject(GetStockObject(WHITE_BRUSH)); m_bufferDC.SelectObject(GetStockObject(BLACK_PEN)); m_pMoveTarget->DrawSelectedEdge(&m_bufferDC); if (pDoc->m_bShowTab) GraphicDrawTab(&m_bufferDC, m_pMoveTarget, pDoc->m_sel); dc.BitBlt(0, 0, m_size.cx - m_ptLocalScroll.x, m_size.cy - m_ptLocalScroll.y, &m_bufferDC, m_ptLocalScroll.x, m_ptLocalScroll.y, SRCCOPY); } break; case CURVE: pDoc->m_GM.m_pts.Add((CPoint)(ptLocal - pDoc->m_GM.m_pt1)); // 相对位置 m_bufferDC.SelectObject(&m_pen); m_bufferDC.MoveTo(m_lastPt); m_bufferDC.LineTo(point); dc.BitBlt(0, 0, m_size.cx, m_size.cy, &m_bufferDC, 0, 0, SRCCOPY); break; case LINE: case RECTANGLE: case ELLIPSE: CGraphic* pGraphic = CGraphic::CreateGraphic(&pDoc->m_GM); ASSERT(pGraphic); pGraphic->m_pt1 -= GetScrollPosition(); pGraphic->m_pt2 = point; if (m_bShiftDown) pGraphic->m_pt2.y = pGraphic->m_pt1.y + labs (pGraphic->m_pt2.x - pGraphic->m_pt1.x); m_bufferDC.BitBlt(0, 0, m_size.cx, m_size.cy, NULL, 0, 0, WHITENESS); m_bufferDC.BitBlt(0, 0, m_size.cx, m_size.cy, &m_backDC, 0, 0, SRCCOPY); pGraphic->Draw(&m_bufferDC); dc.BitBlt(0, 0, m_size.cx, m_size.cy, &m_bufferDC, 0, 0, SRCCOPY); delete pGraphic; break; } m_lastPt = point; } m_ptCursor = ptLocal; m_bFirstMove = FALSE; CScrollView::OnMouseMove(nFlags, point); }