24小时热门版块排行榜    

查看: 1022  |  回复: 7

mmenglu

铜虫 (初入文坛)

[求助] VC界面求助

在VC中,基于对话框的应用程序可以调用画图命令输出曲线吗?我弄了一个基于对话框的MFC应用程序界面计算实验参数,算法有了,能不能通过一个控件输出曲线,怎么做?感谢高手不吝赐教,万分感激啊!!!
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

wpacer

铁虫 (正式写手)

【答案】应助回帖

★ ★
感谢参与,应助指数 +1
xzhdty: 金币+2, 谢谢 2012-06-28 20:43:26
可以,在对话框中加入一个组合框(GroupBox)控件,然后在这个控件中画图
无标题.png
http://kuai.xunlei.com/d/GXSUWBTGMHGT?p=130497

» 本帖已获得的红花(最新10朵)

朗月茶馆董事馆长
2楼2012-06-28 10:29:33
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

libralibra

至尊木虫 (著名写手)

骠骑将军

【答案】应助回帖

★ ★
感谢参与,应助指数 +1
xzhdty: 金币+2, 谢谢骠骑将军 2012-06-28 20:43:16
得到控件cdc,然后直接用笔刷画试试
具体参考这帖子
http://paulfzm.iteye.com/blog/974630
matlab/VB/python/c++/Java写程序请发QQ邮件:790404545@qq.com
3楼2012-06-28 15:42:19
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

voice2001

铜虫 (著名写手)

【答案】应助回帖


感谢参与,应助指数 +1
御剑江湖: 金币+1, 谢谢 2012-06-30 18:45:04
建议用TCHART控件
详细情况可以到网上下载相关资料
4楼2012-06-29 13:43:07
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

wpacer

铁虫 (正式写手)

【答案】应助回帖

★ ★
御剑江湖: 金币+2, 谢谢 2012-06-30 18:45:24
jjdg: 编辑内容 2012-07-03 00:48
jjdg: 编辑内容 2012-07-03 00:49
示例代码:
//在CFormView视图中的GroupBox控件中画经度、纬度、高程变化走势图
void CvrpView:: DrawCordTrend()
{
        CWnd* pWnd;
        CString strFlag,str;
        CRect rect;
        CDC* pDC;
        CPen pen,*pOldPen,pen2;
        //画高程、经度、纬度变化走势图的画笔
        CPen penAlti,penLong,penLati;
        //画(无差分)高程、经度、纬度变化走势图的画笔
        CPen penNAlti,penNLong,penNLati;

        CBrush brush,*pOldBrush;
        POINT ptOrig;
        COLORREF crRef;
        int i,iXNum,iYNum,iXStep,iYStep;
        long iXCenter,iYCenter;

        double dAltiMax,dAltiMin,dLongMax,dLongMin,dLatiMax,dLatiMin;

       
        pWnd = (CStatic*)GetDlgItem( IDC_STATIC_TREND );
        pWnd->Invalidate( );

        pWnd->GetWindowRect(& rect );
        pWnd->ScreenToClient(&rect);
       
        rect.left += 18;//10
        rect.top += 17; //15
        rect.right -= 18;//10
        rect.bottom -= 12; //10
       
        ptOrig.x = rect.left;
        ptOrig.y = ( rect.bottom + rect.top ) / 2 ;

        iXCenter = ( rect.left + rect.right ) / 2 ;
        iYCenter = ( rect.bottom + rect.top ) / 2 ;

       
        pDC = pWnd->GetDC();
        //背景透明
        pDC->SetBkMode( TRANSPARENT );
       
        //通用笔,灰白色
        pen2.CreatePen(PS_SOLID,2,RGB(128,128,128) );
        pen.CreatePen(PS_SOLID,1,RGB(0,126,0) );
       
        //画高程曲线的笔
        penAlti.CreatePen(PS_SOLID,2,RGB(255,0,0) );
        //画经度曲线的笔
        //penLong.CreatePen(PS_SOLID,2,RGB(0,255,0) );
        penLong.CreatePen(PS_SOLID,2,RGB(200,200,0) );
        //画纬度曲线的笔
        penLati.CreatePen(PS_SOLID,2,RGB(0,0,255) );

        //画(无差分)高程曲线的笔
        penNAlti.CreatePen(PS_DOT,1,RGB(255,0,0) );
        //画(无差分)经度曲线的笔
        //penNLong.CreatePen(PS_DOT,1,RGB(0,255,0) );
        penNLong.CreatePen(PS_DOT,1,RGB(200,200,0) );
        //画(无差分)纬度曲线的笔
        penNLati.CreatePen(PS_DOT,1,RGB(0,0,255) );

        pOldPen = pDC->SelectObject(&pen2);

        //刷子
        brush.CreateSolidBrush( RGB( 255,255,255) );
        pOldBrush = pDC->SelectObject( &brush);
        pDC->FillRect( &rect,&brush );

        //画边框
        pDC->MoveTo( rect.left,rect.top );
        pDC->LineTo( rect.left,rect.bottom );
        pDC->LineTo( rect.right,rect.bottom );
        pDC->LineTo( rect.right,rect.top );
        pDC->LineTo( rect.left,rect.top );
       

        //画X、Y轴
        pDC->MoveTo( rect.left , ( rect.bottom + rect.top ) / 2 );
        pDC->LineTo( rect.right, ( rect.bottom + rect.top ) / 2 );
       
        pDC->TextOut( rect.left - 16,( rect.bottom + rect.top ) / 2 - 8 ,"00" );
        pDC->TextOut( rect.right + 6 ,( rect.bottom + rect.top ) / 2 - 8 ,"X" );
        pDC->TextOut( rect.right - 10 ,rect.bottom - 3 ,"108" ); //68

        pDC->MoveTo( ( rect.left + rect.right ) / 2  , rect.top );
        pDC->LineTo( ( rect.left + rect.right ) / 2  , rect.bottom );
       
        pDC->TextOut( rect.left - 16,rect.top - 4 ,"26" ); //+8,14
        pDC->TextOut( rect.left - 16 ,rect.bottom - 4 ,"-26" ); //-10,-8,-14

        pDC->TextOut( ( rect.left + rect.right ) / 2 - 9,rect.bottom - 3 ,"54" ); //34
       
        //画轴上的箭头
        pDC->MoveTo( rect.right,( rect.bottom + rect.top ) / 2 );
        pDC->LineTo(  rect.right - 6,( rect.bottom + rect.top ) / 2 - 6 );
        pDC->MoveTo( rect.right,( rect.bottom + rect.top ) / 2 );
        pDC->LineTo(  rect.right - 6,( rect.bottom + rect.top ) / 2 + 6 );

        pDC->MoveTo( ( rect.left + rect.right ) / 2,rect.top );
        pDC->LineTo( ( rect.left + rect.right ) / 2 - 6 ,rect.top + 6 );
        pDC->TextOut( ( rect.left + rect.right ) / 2 + 9,rect.top ,"Y" ); //34

        pDC->MoveTo( ( rect.left + rect.right ) / 2,rect.top );
        pDC->LineTo( ( rect.left + rect.right ) / 2 + 6 ,rect.top + 6 );

       
        //画一个点,第一象限45度角
        pDC->SelectObject(&penNLati);
        pDC->MoveTo( ( rect.left + rect.right ) / 2  , ( rect.bottom + rect.top ) / 2  );
        pDC->LineTo(( rect.left + rect.right ) / 2 +(rect.right-rect.left)/2,( rect.bottom + rect.top ) / 2+( rect.top - rect.bottom ) / 2  );
        pDC->MoveTo( ( rect.left + rect.right ) / 2 +(rect.right-rect.left)/4 ,( rect.bottom + rect.top ) / 2+( rect.top - rect.bottom ) / 4  );
       
        pDC->TextOut(( rect.left + rect.right ) / 2 +(rect.right-rect.left)/4 ,( rect.bottom + rect.top ) / 2+( rect.top - rect.bottom ) / 4,"1(45)" );


        pDC->SelectObject(&pen);
        iXNum = 48;//32
        iYNum = 25;//8,14
        iXStep = ( rect.right - rect.left ) / ( 2 * iXNum );
        iYStep = ( rect.bottom - rect.top ) / ( 2 * iYNum );

        //画横轴栅格线
        for ( i = 1;i < ( iYNum + 1 ); i ++)
        {
                pDC->MoveTo( rect.left, iYCenter - i * iYStep );
                pDC->LineTo( rect.right, iYCenter - i * iYStep );

                pDC->MoveTo( rect.left, iYCenter + i * iYStep );
                pDC->LineTo( rect.right, iYCenter + i * iYStep );
        }

        //画纵轴栅格线
        for ( i = 1;i < ( iXNum + 6 ); i ++) //12
        {
                pDC->MoveTo( iXCenter - i * iXStep, rect.top );
                pDC->LineTo( iXCenter - i * iXStep, rect.bottom );

                if ( !( i % 18 ) ) //17
                {
                        str.Format("%02d",i);
                        //pDC->TextOut( iXCenter - i * iXStep - 8,rect.bottom - 3 ,str);
                        pDC->TextOut( i * iXStep - 4,rect.bottom - 3 ,str);
                        str.Format("%02d",( 108 - i ) );
                        pDC->TextOut( rect.right -  i * iXStep - 6,rect.bottom - 3 ,str);
                }

                pDC->MoveTo( iXCenter + i * iXStep, rect.top );
                pDC->LineTo( iXCenter + i * iXStep, rect.bottom );

        }
       
.................
       
        //恢复系统原来的画笔
        pDC->SelectObject( pOldPen );
        pDC->SelectObject( pOldBrush );
        ReleaseDC( pDC );
        pDC = NULL;

}

[ Last edited by jjdg on 2012-7-3 at 00:49 ]
朗月茶馆董事馆长
5楼2012-06-29 16:10:47
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

zxj1991

铜虫 (小有名气)

去网上百度一下吧
我就是我
6楼2012-06-30 14:53:55
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

mmenglu

铜虫 (初入文坛)

送鲜花一朵
引用回帖:
2楼: Originally posted by wpacer at 2012-06-28 10:29:33
可以,在对话框中加入一个组合框(GroupBox)控件,然后在这个控件中画图
无标题.png
http://kuai.xunlei.com/d/GXSUWBTGMHGT?p=130497

太好了,我就想要一种这种界面,但是我只会添加资源,可是资源怎么响应,我是一窍不通啊,求大侠指点迷津吧!!!
7楼2012-07-02 09:55:51
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

wpacer

铁虫 (正式写手)

【答案】应助回帖

jjdg: 编辑内容 2012-07-03 00:47
请参加5楼的示例代码,代码中的IDC_STATIC_TREND是添加的组合框(GroupBox)控件的ID,在画图函数void CvrpView: DrawCordTrend() 中取得IDC_STATIC_TREND所对应的窗口指针,然后在这个窗口中作图,结果示意图见URL:
http://kuai.xunlei.com/d/GXSUWBTGMHGT?p=130497

[ Last edited by jjdg on 2012-7-3 at 00:47 ]
朗月茶馆董事馆长
8楼2012-07-02 14:04:09
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 mmenglu 的主题更新
信息提示
请填处理意见