CSize CChartAxis::GetLargestTick(CDC* pDC) { CFont NewFont; NewFont.CreatePointFont(m_nFontSize,m_strFontName.c_str(),pDC); CFont* pOldFont = pDC->SelectObject(&NewFont); CSize MaxSize(0,0); if (m_MaxValue == m_MinValue) { TChartString strLabel = GetTickLabel(m_MinValue); MaxSize = pDC->GetTextExtent(strLabel.c_str(),strLabel.size()); } else { double TickValue = GetFirstTickValue(); do { if (IsLabelOnAxis(TickValue)) { TChartString strLabel = GetTickLabel(TickValue); CSize TextSize = pDC->GetTextExtent(strLabel.c_str(),strLabel.size()); if (TextSize.cy > MaxSize.cy) MaxSize.cy = TextSize.cy; if (TextSize.cx > MaxSize.cx) MaxSize.cx = TextSize.cx; } } while (GetNextTickValue(TickValue, TickValue)); } pDC->SelectObject(pOldFont); NewFont.DeleteObject(); return MaxSize; }
void CRegisterValueAnalyzerDlg::OnBnClickedTopaxisRadio() { CChartAxis* pAxis = m_ChartCtrl.GetTopAxis(); if (pAxis->IsVisible()) ((CButton*)GetDlgItem(IDC_AXISVISIBLE_CHECK))->SetCheck(1); else ((CButton*)GetDlgItem(IDC_AXISVISIBLE_CHECK))->SetCheck(0); if (pAxis->GetGrid()->IsVisible()) ((CButton*)GetDlgItem(IDC_AXISGRIDVIS_CHECK))->SetCheck(1); else ((CButton*)GetDlgItem(IDC_AXISGRIDVIS_CHECK))->SetCheck(0); if (pAxis->IsAutomatic()) ((CButton*)GetDlgItem(IDC_AXISAUTOMATIC_CHECK))->SetCheck(1); else ((CButton*)GetDlgItem(IDC_AXISAUTOMATIC_CHECK))->SetCheck(0); if (pAxis->IsInverted()) ((CButton*)GetDlgItem(IDC_AXISINVERTED_CHECK))->SetCheck(1); else ((CButton*)GetDlgItem(IDC_AXISINVERTED_CHECK))->SetCheck(0); if (pAxis->ScrollBarEnabled()) ((CButton*)GetDlgItem(IDC_AXISSCROLLBAR_CHECK))->SetCheck(1); else ((CButton*)GetDlgItem(IDC_AXISSCROLLBAR_CHECK))->SetCheck(0); TChartString AxisLabel = pAxis->GetLabel()->GetText(); GetDlgItem(IDC_AXISLABEL_EDIT)->SetWindowText(AxisLabel.c_str()); double Min=0, Max=0; CString strBuff; pAxis->GetMinMax(Min,Max); strBuff.Format(_T("%.2f"),Min); GetDlgItem(IDC_AXISMINVAL_EDIT)->SetWindowText(strBuff); strBuff.Format(_T("%.2f"),Max); GetDlgItem(IDC_AXISMAXVAL_EDIT)->SetWindowText(strBuff); }
void CChartCtrl::SaveAsImage(const TChartString& strFilename, const CRect& rect, int nBPP, REFGUID guidFileType) { //AFX_MANAGE_STATE(AfxGetStaticModuleState()); CImage chartImage; CRect chartRect = rect; if (chartRect.IsRectEmpty()) { GetClientRect(&chartRect); } chartImage.Create(chartRect.Width(), chartRect.Height(), nBPP); CDC newDC; newDC.Attach(chartImage.GetDC()); DrawBackground(&newDC, chartRect); chartRect.DeflateRect(3,3); DrawChart(&newDC, chartRect); newDC.Detach(); chartImage.Save(strFilename.c_str(), guidFileType); chartImage.ReleaseDC(); }
void CChartCtrl::Print(const TChartString& strTitle, CPrintDialog* pPrntDialog) { //AFX_MANAGE_STATE(AfxGetStaticModuleState()); CDC dc; if (pPrntDialog == NULL) { CPrintDialog printDlg(FALSE); if (printDlg.DoModal() != IDOK) // Get printer settings from user return; dc.Attach(printDlg.GetPrinterDC()); // attach a printer DC } else dc.Attach(pPrntDialog->GetPrinterDC()); // attach a printer DC dc.m_bPrinting = TRUE; DOCINFO di; // Initialise print doc details memset(&di, 0, sizeof (DOCINFO)); di.cbSize = sizeof (DOCINFO); di.lpszDocName = strTitle.c_str(); BOOL bPrintingOK = dc.StartDoc(&di); // Begin a new print job CPrintInfo Info; Info.m_rectDraw.SetRect(0,0, dc.GetDeviceCaps(HORZRES), dc.GetDeviceCaps(VERTRES)); OnBeginPrinting(&dc, &Info); // Initialise printing for (UINT page = Info.GetMinPage(); page <= Info.GetMaxPage() && bPrintingOK; page++) { dc.StartPage(); // begin new page Info.m_nCurPage = page; OnPrint(&dc, &Info); // Print page bPrintingOK = (dc.EndPage() > 0); // end page } OnEndPrinting(&dc, &Info); // Clean up after printing if (bPrintingOK) dc.EndDoc(); // end a print job else dc.AbortDoc(); // abort job. dc.Detach(); // detach the printer DC }
void CChartAxis::DrawTick(CDC* pDC, double dTickVal) { long TickPos = GetTickPos(dTickVal); long lLabelPos = ValueToScreen(dTickVal); TChartString strBuffer = GetTickLabel(dTickVal); CSize TextSize = pDC->GetTextExtent(strBuffer.c_str()); CSize LabelSize = m_pAxisLabel->GetSize(pDC); bool bLabelOnAxis = IsLabelOnAxis(dTickVal); bool bTickOnAxis = true; if (m_bIsHorizontal) { if (TickPos<m_StartPos || TickPos>m_EndPos) bTickOnAxis = false; if (!m_bIsSecondary) { if (bTickOnAxis) { pDC->MoveTo(TickPos,m_AxisRect.top+1); pDC->LineTo(TickPos,m_AxisRect.top+4); } if (bLabelOnAxis) { pDC->ExtTextOut(lLabelPos-TextSize.cx/2,m_AxisRect.top+5, ETO_CLIPPED|ETO_OPAQUE,NULL,strBuffer.c_str(),NULL); } } else { if (bTickOnAxis) { pDC->MoveTo(TickPos,m_AxisRect.bottom-1); pDC->LineTo(TickPos,m_AxisRect.bottom-4); } if (bLabelOnAxis) { pDC->ExtTextOut(lLabelPos-TextSize.cx/2,m_AxisRect.bottom-5-TextSize.cy, ETO_CLIPPED|ETO_OPAQUE,NULL,strBuffer.c_str(),NULL); } } } else { if (TickPos>m_StartPos || TickPos<m_EndPos) bTickOnAxis = false; if (!m_bIsSecondary) { if (bTickOnAxis) { pDC->MoveTo(m_AxisRect.right-1,TickPos); pDC->LineTo(m_AxisRect.right-4,TickPos); } if (bLabelOnAxis) { pDC->ExtTextOut(m_AxisRect.left+LabelSize.cx+4,lLabelPos-TextSize.cy/2, ETO_CLIPPED|ETO_OPAQUE,NULL,strBuffer.c_str(),NULL); } } else { if (bTickOnAxis) { pDC->MoveTo(m_AxisRect.left+1,TickPos); pDC->LineTo(m_AxisRect.left+4,TickPos); } if (bLabelOnAxis) { pDC->ExtTextOut(m_AxisRect.left+6,lLabelPos-TextSize.cy/2, ETO_CLIPPED|ETO_OPAQUE,NULL,strBuffer.c_str(),NULL); } } } m_pAxisGrid->AddTick(TickPos); }