| MFC扩展编程实例极坐标图表曲线样式与标签设置 
 当前例程实现极坐标图表的创建,以及设置图表曲线类型,样式,宽度等属性。
 效果如下图。
 
 MFC扩展编程实例极坐标图表曲线样式与标签设置   
 点击界面的曲线类型,可以设置极坐标图表数据系列的曲线类型为直线,曲线或不显示。
 点击曲线宽度,也可以设置网线的宽度,从1到7像素设置。
 点击红线样式,可以设置曲线也实现,虚线或点划线等。
 点击标签设置,可以设置标签的显示角度。
 
 下面是例程实现过程介绍。
 
 先创建基于MFC扩展库的单文档工程,class CMy123View : public CBCGPFormView。
 在默认的对话框资源上添加一图片控件,ID修改为IDC_CHART,用于显示图表 。
 在视窗类添加自定义成员变量与函数,并添加虚函数Create,初始化变量。
 CBCGPChartCtrl m_wndChart;
 void UpdateChart();
 
 
 复制代码int nAngle=0;
int nLineStyle=0;
int nLineWidth=1;
int nCurveType=0;
void CMy123View::UpdateChart()
{
        CBCGPChartVisualObject* pChart = m_wndChart.GetChart();
        ASSERT_VALID(pChart);
        pChart->ShowDataMarkers();//显示数据标识点;
        pChart->ShowDataLabels(true, TRUE, TRUE, nAngle * 45);//显示数据标签;
        for (int i = 0; i < pChart->GetSeriesCount(); i++)
        {
                CBCGPChartPolarSeries* pSeries = DYNAMIC_DOWNCAST(CBCGPChartPolarSeries, pChart->GetSeries(i));
                ASSERT_VALID(pSeries);
                BCGPChartFormatSeries style = pSeries->GetSeriesFormat();
                switch (nCurveType)//曲线类型;
                {
                case 0:
                        style.m_curveType = BCGPChartFormatSeries::CCT_NO_LINE;
                        break;
                case 1:
                        style.m_curveType = BCGPChartFormatSeries::CCT_LINE;
                        break;
                case 2:
                        style.m_curveType = BCGPChartFormatSeries::CCT_SPLINE;
                        break;
                case 3:
                        style.m_curveType = BCGPChartFormatSeries::CCT_SPLINE_HERMITE;
                        break;
                }
                style.SetSeriesOutlineDashStyle((CBCGPStrokeStyle::BCGP_DASH_STYLE)nLineStyle);//曲线样式;
                style.SetSeriesLineWidth(nLineWidth);//曲线宽度;
                pSeries->CloseShape(i == 0, i == 0);//第二系列不闭合不填充;
                pSeries->SetSeriesFormat(style);
        }
        pChart->Redraw();
}
复制代码BOOL CMy123View::Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext)
{
        BOOL bRst = CBCGPFormView::Create(lpszClassName, lpszWindowName, dwStyle, rect, pParentWnd, nID, pContext);;
        //图表初始化;
        m_wndChart.SubclassDlgItem(IDC_CHART,this);        
        CBCGPInfoTipOptions infoTipOptions;
        infoTipOptions.m_StemLocation = CBCGPPopupWindow::BCGPPopupWindowStemLocation_Left;
        m_wndChart.EnableInfoTip(TRUE, &infoTipOptions);//显示提示文本;
        CBCGPChartVisualObject* pChart = m_wndChart.GetChart();//获取图表指针;
        pChart->SetChartType(BCGPChartPolar);//
        pChart->SetChartTitle(_T("雷达图表"));//设置图表标题;
        pChart->SetSeriesShadow(true);//数据系列显示阴影;
        pChart->SetThemeOpacity(30);
        //创建数据系列,添加数据;
        CBCGPChartSeries* pSeries1 = pChart->CreateSeries(_T("系列 1"));
        CBCGPChartSeries* pSeries2 = pChart->CreateSeries(_T("系列 2"));
        pSeries1->AddDataPoint(15.);
        pSeries1->AddDataPoint(10.);
        pSeries1->AddDataPoint(8.);
        pSeries1->AddDataPoint(22.);
        pSeries2->AddDataPoint(9.);
        pSeries2->AddDataPoint(15.);
        pSeries2->AddDataPoint(19.);
        pSeries2->AddDataPoint(21.);
        pSeries2->AddDataPoint(23.);
        //坐标设置;
        CBCGPChartAxisPolarX* pXAxis = DYNAMIC_DOWNCAST(CBCGPChartAxisPolarX, pChart->GetChartAxis(BCGP_CHART_X_POLAR_AXIS));
        ASSERT_VALID(pXAxis);
        pXAxis->m_majorTickMarkType = CBCGPChartAxis::TMT_CROSS;
        CBCGPChartAxisPolarY* pYAxis = DYNAMIC_DOWNCAST(CBCGPChartAxisPolarY, pChart->GetChartAxis(BCGP_CHART_Y_POLAR_AXIS));
        ASSERT_VALID(pYAxis);
        pYAxis->m_majorTickMarkType = CBCGPChartAxis::TMT_CROSS;
        pYAxis->m_bRadialGridLines = FALSE;
        //添加添加到布局管理器统一管理布局;
        if (GetLayout() == NULL)
                return bRst;
        CBCGPStaticLayout* pLayout = (CBCGPStaticLayout*)GetLayout();
        if (pLayout == NULL)
                return bRst;
        pLayout->AddAnchor(m_wndChart.GetDlgCtrlID(), CBCGPStaticLayout::e_MoveTypeNone, CBCGPStaticLayout::e_SizeTypeBoth);
        //
        return bRst;
}
 可以看到函数UpdateChart前面有定义一些全局的变量供图表属性设置。
 再通过其他按钮来修改这些变量值,可以设置图表属性类型。
 
 例程用到的MFC扩展库可以在网站搜索下载。复制代码void CMy123View::OnBnClickedButton1()//曲线类型;
{
        nCurveType++;
        nCurveType = nCurveType>3?0:nCurveType;
        UpdateChart();
}
void CMy123View::OnBnClickedButton2()//曲线宽度;
{
        nLineWidth++;
        nLineWidth=nLineWidth>7?0:nLineWidth;
        UpdateChart();
}
void CMy123View::OnBnClickedButton3()//曲线样式;
{
        nLineStyle++;
        nLineStyle = nLineStyle>5?0:nLineStyle;
        UpdateChart();
}
void CMy123View::OnBnClickedButton4()//标签位置;
{
        nAngle++;
        nAngle = nAngle>8?0:nAngle;
        UpdateChart();
}
例程源代码下载地址:
 
 
   如果您认可,可联系功能定制! 如果您着急,充值会员可直接联系发您资料!    
 
   上位机VC MFC程序开发精典实例大全源码与视频讲解配套下载408例 经历1年的编程与录制点击进入查看 
 
 |