//*********************************************************************************************************** void CBCGPBaseVisualCtrl::OnSize(UINT nType, int cx, int cy) { CStatic::OnSize(nType, cx, cy); SetRect(CBCGPRect(0, 0, cx, cy), TRUE); CRect rect (0, 0, cx, cy); if (m_pToolTip->GetSafeHwnd () != NULL) { m_pToolTip->SetToolRect (this, 1, rect); } if (GetExStyle() & WS_EX_LAYERED) { OnDrawLayeredPopup(); } }
//******************************************************************************* int CBCGPChartView::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CScrollView::OnCreate(lpCreateStruct) == -1) return -1; m_pWndChartCtrl = CreateChart (); if (m_pWndChartCtrl == NULL) { TRACE0("CBCGPChartView::OnCreate: Chart control is not created\n"); return -1; } ASSERT_VALID (m_pWndChartCtrl); ASSERT (m_pWndChartCtrl->IsKindOf (RUNTIME_CLASS (CBCGPChartCtrl))); if (!m_pWndChartCtrl->Create (CBCGPRect(), this, ID_CHART_CTRL)) { TRACE0("CBCGPChartView::OnCreate: cannot create Chart control\n"); return -1; } return 0; }
//**************************************************************************************** void CBCGPEngine3D::FillPolygon(const CBCGPPointsArray& arPoints, const CBCGPBrush& brush) { int nNumPoints = (int)arPoints.GetSize(); if (m_pDefaultGM == NULL || nNumPoints == 0) { return; } ASSERT_VALID(m_pDefaultGM); if (m_pDefaultGM->GetType() == CBCGPGraphicsManager::BCGP_GRAPHICS_MANAGER_GDI) { CBCGPPolygonGeometry g(arPoints); g.SetTemporary(); m_pDefaultGM->FillGeometry(g, brush); } else { LPPOINT arPointsGDI = new POINT[nNumPoints]; for (int i = 0; i < nNumPoints; i++) { arPointsGDI[i] = CPoint(bcg_round(arPoints[i].x), bcg_round(arPoints[i].y)); } HRGN hrgn = ::CreatePolygonRgn(arPointsGDI, nNumPoints, ALTERNATE); UINT nBytesCount = ::GetRegionData(hrgn, sizeof(RGNDATA), NULL); if (nBytesCount == 0) { delete [] arPointsGDI; return; } LPBYTE lpRgnData = new BYTE[nBytesCount]; ZeroMemory( lpRgnData, nBytesCount); if (::GetRegionData(hrgn, nBytesCount, (LPRGNDATA)lpRgnData) != nBytesCount) { delete [] arPointsGDI; delete [] lpRgnData; return; } LPRGNDATA pData = (LPRGNDATA)lpRgnData; LPRECT points = (LPRECT)pData->Buffer; for (DWORD k = 0; k < pData->rdh.nCount; k++) { m_pDefaultGM->FillRectangle(CBCGPRect(points[k]), brush); } delete [] arPointsGDI; delete [] lpRgnData; DeleteObject(hrgn); } }
//****************************************************************************** void CBCGPRadialMenuItem::OnDrawIcon(CBCGPGraphicsManager* pGM, BOOL bIsCtrlDisabled, CBCGPImage& icons, CBCGPSize sizeIcon) { ASSERT_VALID(pGM); if (m_ptCenter == CBCGPPoint(-1, -1)) { return; } BOOL bIsDisabled = bIsCtrlDisabled || m_bIsDisabled; HICON hIcon = NULL; if (m_hIcon != NULL) { hIcon = m_hIcon; } else if (m_nImageIndex >= 0) { CBCGPPoint ptImage = m_ptCenter; ptImage.x -= .5 * sizeIcon.cx; ptImage.y -= .5 * sizeIcon.cy; pGM->DrawImage(icons, ptImage, sizeIcon, bIsDisabled ? .4 : 1., CBCGPImage::BCGP_IMAGE_INTERPOLATION_MODE_LINEAR, CBCGPRect(CBCGPPoint(sizeIcon.cx * m_nImageIndex, 0), sizeIcon)); } else { // Try to obtain icon from ribbon/toolbars: #ifndef _BCGSUITE_ #ifndef BCGP_EXCLUDE_RIBBON CFrameWnd* pParentFrame = DYNAMIC_DOWNCAST (CFrameWnd, AfxGetMainWnd()); CBCGPRibbonBar* pRibbonBar = NULL; CBCGPMDIFrameWnd* pMainFrame = DYNAMIC_DOWNCAST (CBCGPMDIFrameWnd, pParentFrame); if (pMainFrame != NULL) { pRibbonBar = pMainFrame->GetRibbonBar(); } else // Maybe, SDI frame... { CBCGPFrameWnd* pFrame = DYNAMIC_DOWNCAST (CBCGPFrameWnd, pParentFrame); if (pFrame != NULL) { pRibbonBar = pFrame->GetRibbonBar(); } } if (pRibbonBar != NULL) { ASSERT_VALID(pRibbonBar); hIcon = pRibbonBar->ExportImageToIcon(m_nID, FALSE); } else #endif #endif { #ifndef _BCGSUITE_ int nImage = CImageHash::GetImageOfCommand(m_nID, FALSE); #else int nImage = GetCmdMgr ()->GetCmdImage(m_nID, FALSE); #endif CBCGPToolBarImages* pImages = CBCGPToolBar::GetImages(); if (pImages != NULL && nImage >= 0) { hIcon = pImages->ExtractIcon(nImage); } } if (hIcon != NULL) { m_hIcon = hIcon; m_bDestroyIcon = TRUE; } } if (hIcon != NULL) { CBCGPImage image(hIcon); sizeIcon = pGM->GetImageSize(image); CBCGPPoint ptImage = m_ptCenter; ptImage.x -= .5 * sizeIcon.cx; ptImage.y -= .5 * sizeIcon.cy; pGM->DrawImage(image, ptImage, CBCGPSize(), bIsDisabled ? .4 : 1); } }
//******************************************************************************* void CBCGPChartObject::OnCalcScreenPoints(CBCGPGraphicsManager* pGM) { ASSERT_VALID(this); m_rectScreen.SetRectEmpty(); m_rectScreenBounds.SetRectEmpty(); m_ptAnchor.x = m_ptAnchor.y = 0.; if (m_pParentChart == NULL) { return; } CBCGPSize szScaleRatio = m_pParentChart->GetScaleRatio(); CBCGPChartAxis* pXAxis = m_pXAxis; CBCGPChartAxis* pYAxis = m_pYAxis; if (m_coordinateMode == CBCGPChartObject::CM_CHART_VALUES || m_coordinateMode == CBCGPChartObject::CM_CHART_VALUE_DIST_ANGLE || m_coordinateMode == CBCGPChartObject::CM_AXIS_INSIDE_MARK || m_coordinateMode == CBCGPChartObject::CM_AXIS_OUTSIDE_MARK) { if (pXAxis == NULL) { m_pXAxis = pXAxis = m_pParentChart->GetChartAxis(BCGP_CHART_X_PRIMARY_AXIS); } if (pYAxis == NULL) { m_pYAxis = pYAxis = m_pParentChart->GetChartAxis(BCGP_CHART_Y_PRIMARY_AXIS); } } CBCGPSize szObjectSize = m_szObjectSize.IsNull() ? OnCalcObjectSize(pGM) : m_szObjectSize; m_rectScreenBounds = OnCalcBoundingRect(); CBCGPRect rectBounds = m_rectScreenBounds; CBCGPPoint ptLeftTop(CBCGPChartObject::_EmptyPoint); CBCGPPoint ptRightBottom(CBCGPChartObject::_EmptyPoint); if (m_coordinateMode == CBCGPChartObject::CM_PERCENTS) { if (m_rectCoordinates.left != CBCGPChartObject::_EmptyCoordinate) { ptLeftTop.x = rectBounds.left + rectBounds.Width() * m_rectCoordinates.left / 100.; } if (m_rectCoordinates.top != CBCGPChartObject::_EmptyCoordinate) { ptLeftTop.y = rectBounds.top + rectBounds.Height() * m_rectCoordinates.top / 100; } if (m_rectCoordinates.right != CBCGPChartObject::_EmptyCoordinate) { ptRightBottom.x = rectBounds.right - rectBounds.Width() * m_rectCoordinates.right / 100.; } if (m_rectCoordinates.bottom != CBCGPChartObject::_EmptyCoordinate) { ptRightBottom.y = rectBounds.bottom - rectBounds.Height() * m_rectCoordinates.bottom / 100.; } } else if (m_coordinateMode == CBCGPChartObject::CM_PIXELS) { if (m_rectCoordinates.left != CBCGPChartObject::_EmptyCoordinate) { ptLeftTop.x = rectBounds.left + m_rectCoordinates.left * szScaleRatio.cx; } if (m_rectCoordinates.top != CBCGPChartObject::_EmptyCoordinate) { ptLeftTop.y = rectBounds.top + m_rectCoordinates.top * szScaleRatio.cy; } if (m_rectCoordinates.right != CBCGPChartObject::_EmptyCoordinate) { ptRightBottom.x = rectBounds.right - m_rectCoordinates.right * szScaleRatio.cx; } if (m_rectCoordinates.bottom != CBCGPChartObject::_EmptyCoordinate) { ptRightBottom.y = rectBounds.bottom - m_rectCoordinates.bottom * szScaleRatio.cy; } } else if (m_coordinateMode == CBCGPChartObject::CM_PIXELS_FIXED_SIZE) { if (m_rectCoordinates.left != CBCGPChartObject::_EmptyCoordinate) { ptLeftTop.x = rectBounds.left + m_rectCoordinates.left * szScaleRatio.cx; } else { ptLeftTop.x = rectBounds.left; } if (m_rectCoordinates.top != CBCGPChartObject::_EmptyCoordinate) { ptLeftTop.y = rectBounds.top + m_rectCoordinates.top * szScaleRatio.cy; } else { ptLeftTop.y = rectBounds.top; } if (m_rectCoordinates.right != CBCGPChartObject::_EmptyCoordinate) { ptRightBottom.x = ptLeftTop.x + m_rectCoordinates.right * szScaleRatio.cx; } else { ptRightBottom.x = ptLeftTop.x + rectBounds.Width(); } if (m_rectCoordinates.bottom != CBCGPChartObject::_EmptyCoordinate) { ptRightBottom.y = ptLeftTop.y + m_rectCoordinates.bottom * szScaleRatio.cy; } else { ptRightBottom.y = ptLeftTop.y + rectBounds.Height(); } } else if (m_coordinateMode == CBCGPChartObject::CM_CHART_VALUES) { ASSERT_VALID(pXAxis); ASSERT_VALID(pYAxis); CBCGPRect rectCoordinates = m_rectCoordinates; if (pXAxis != NULL && pXAxis->IsVertical()) { rectCoordinates = CBCGPRect(m_rectCoordinates.bottom, m_rectCoordinates.right, m_rectCoordinates.top, m_rectCoordinates.left); pXAxis = m_pYAxis; pYAxis = m_pXAxis; } if (pXAxis->m_bReverseOrder && !pXAxis->IsVertical()) { if ((rectCoordinates.left != CBCGPChartObject::_EmptyCoordinate && rectCoordinates.right == CBCGPChartObject::_EmptyCoordinate) || (rectCoordinates.left == CBCGPChartObject::_EmptyCoordinate && rectCoordinates.right != CBCGPChartObject::_EmptyCoordinate)) { rectCoordinates.SwapLeftRight(); } } if (pYAxis->m_bReverseOrder && pYAxis->IsVertical()) { if ((rectCoordinates.top != CBCGPChartObject::_EmptyCoordinate && rectCoordinates.bottom == CBCGPChartObject::_EmptyCoordinate) || (rectCoordinates.top == CBCGPChartObject::_EmptyCoordinate && rectCoordinates.bottom != CBCGPChartObject::_EmptyCoordinate)) { rectCoordinates.SwapTopBottom(); } } if (rectCoordinates.left != CBCGPChartObject::_EmptyCoordinate) { ptLeftTop.x = pXAxis->PointFromValue(rectCoordinates.left, FALSE); } else if (szObjectSize.cx == 0) { ptLeftTop.x = pXAxis->PointFromValue(pXAxis->GetMinDisplayedValue(TRUE), TRUE); } if (rectCoordinates.top != CBCGPChartObject::_EmptyCoordinate) { ptLeftTop.y = pYAxis->PointFromValue(rectCoordinates.top, FALSE); } else if (szObjectSize.cy == 0) { ptLeftTop.y = pYAxis->PointFromValue(pYAxis->GetMaxDisplayedValue(TRUE), TRUE); } if (rectCoordinates.right != CBCGPChartObject::_EmptyCoordinate) { ptRightBottom.x = pXAxis->PointFromValue(rectCoordinates.right, FALSE); } else if (szObjectSize.cx == 0) { ptRightBottom.x = pXAxis->PointFromValue(pXAxis->GetMaxDisplayedValue(TRUE), TRUE); } if (rectCoordinates.bottom != CBCGPChartObject::_EmptyCoordinate) { ptRightBottom.y = pYAxis->PointFromValue(rectCoordinates.bottom, FALSE); } else if (szObjectSize.cy == 0) { ptRightBottom.y = pYAxis->PointFromValue(pYAxis->GetMinDisplayedValue(TRUE), TRUE); } } else if (m_coordinateMode == CM_CHART_VALUE_DIST_ANGLE) { ASSERT_VALID(pXAxis); ASSERT_VALID(pYAxis); if (!IsRectOffsetsValid()) { return; } CBCGPRect rectCoordinates = m_rectCoordinates; if (pXAxis != NULL && pXAxis->IsVertical()) { rectCoordinates = CBCGPRect(m_rectCoordinates.top, m_rectCoordinates.left, m_rectCoordinates.right, m_rectCoordinates.bottom); pXAxis = m_pYAxis; pYAxis = m_pXAxis; } m_ptAnchor.x = pXAxis->PointFromValue(rectCoordinates.left, FALSE); m_ptAnchor.y = pYAxis->PointFromValue(rectCoordinates.top, FALSE); double dblDistanceX = rectCoordinates.right * szScaleRatio.cx; double dblDistanceY = rectCoordinates.right * szScaleRatio.cy; CBCGPPoint ptCenter(m_ptAnchor.x + dblDistanceX * sin(bcg_deg2rad(rectCoordinates.bottom)), m_ptAnchor.y - dblDistanceY * cos(bcg_deg2rad(rectCoordinates.bottom))); ptLeftTop.SetPoint(ptCenter.x - szObjectSize.cx / 2, ptCenter.y - szObjectSize.cy / 2); ptRightBottom.SetPoint(ptCenter.x + szObjectSize.cx / 2, ptCenter.y + szObjectSize.cy / 2); } else if (m_coordinateMode == CM_AXIS_INSIDE_MARK || m_coordinateMode == CM_AXIS_OUTSIDE_MARK) { ASSERT_VALID(pXAxis); ASSERT_VALID(pYAxis); if (m_rectCoordinates.top == _EmptyCoordinate && m_rectCoordinates.left == _EmptyCoordinate) { return; } double dblHorzOffset = m_rectCoordinates.right == _EmptyCoordinate ? 0 : m_rectCoordinates.right * szScaleRatio.cx; double dblVertOffset = m_rectCoordinates.bottom == _EmptyCoordinate ? 0 : m_rectCoordinates.bottom * szScaleRatio.cy; CBCGPChartAxis* pUsedAxis = m_rectCoordinates.left != _EmptyCoordinate ? pXAxis : pYAxis; double dblUsedValue = m_rectCoordinates.left != _EmptyCoordinate ? m_rectCoordinates.left : m_rectCoordinates.top; double dblScrVal = pUsedAxis->PointFromValue(dblUsedValue, FALSE); CBCGPRect rectAxis = pUsedAxis->GetAxisRect(FALSE, FALSE, TRUE); CBCGPPoint ptCenter; if (m_coordinateMode == CM_AXIS_INSIDE_MARK && (pUsedAxis->m_axisDefaultPosition == CBCGPChartAxis::ADP_BOTTOM || pUsedAxis->m_axisDefaultPosition == CBCGPChartAxis::ADP_LEFT) || m_coordinateMode == CM_AXIS_OUTSIDE_MARK && (pUsedAxis->m_axisDefaultPosition == CBCGPChartAxis::ADP_TOP || pUsedAxis->m_axisDefaultPosition == CBCGPChartAxis::ADP_RIGHT)) { if (pUsedAxis->IsVertical()) { ptCenter.x = rectAxis.right + dblVertOffset + szObjectSize.cx / 2; ptCenter.y = dblScrVal - dblHorzOffset; } else { ptCenter.x = dblScrVal + dblHorzOffset; ptCenter.y = rectAxis.top - dblVertOffset - szObjectSize.cy /2; } } else { if (pUsedAxis->IsVertical()) { ptCenter.x = rectAxis.left - dblVertOffset - szObjectSize.cx / 2; ptCenter.y = dblScrVal - dblHorzOffset; } else { ptCenter.x = dblScrVal + dblHorzOffset; ptCenter.y = rectAxis.bottom + dblVertOffset + szObjectSize.cy /2; } } if (pUsedAxis->IsVertical() && (ptCenter.y < rectAxis.top || ptCenter.y > rectAxis.bottom) || !pUsedAxis->IsVertical() && (ptCenter.x < rectAxis.left || ptCenter.x > rectAxis.right)) { return; } ptLeftTop.SetPoint(ptCenter.x - szObjectSize.cx / 2, ptCenter.y - szObjectSize.cy / 2); ptRightBottom.SetPoint(ptCenter.x + szObjectSize.cx / 2, ptCenter.y + szObjectSize.cy / 2); } else { return; } if (m_format.m_textFormat.IsWordWrap()) { if (ptLeftTop.x == CBCGPChartObject::_EmptyCoordinate && ptRightBottom.x == CBCGPChartObject::_EmptyCoordinate && szObjectSize.cx == 0) { ASSERT(FALSE); TRACE0(" CBCGPChartObject::OnCalcScreenPoints: Left and right offsets must be specified in order to properly use wrapped text.\n"); return; } szObjectSize = pGM->GetTextSize(m_strText, m_format.m_textFormat, ptRightBottom.x - ptLeftTop.x); } if (ptLeftTop.x == CBCGPChartObject::_EmptyCoordinate) { ptLeftTop.x = ptRightBottom.x - szObjectSize.cx; } if (ptLeftTop.y == CBCGPChartObject::_EmptyCoordinate) { ptLeftTop.y = ptRightBottom.y - szObjectSize.cy; } if (ptRightBottom.x == CBCGPChartObject::_EmptyCoordinate) { ptRightBottom.x = ptLeftTop.x + szObjectSize.cx; } if (ptRightBottom.y == CBCGPChartObject::_EmptyCoordinate) { ptRightBottom.y = ptLeftTop.y + szObjectSize.cy; } m_rectScreen.SetRect(ptLeftTop, ptRightBottom); }