问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

怎么用mfc做出如图所示的gtr仪表

发布网友 发布时间:2022-04-21 15:29

我来回答

3个回答

热心网友 时间:2023-11-14 21:37

用c++的mfc绘制柱状图的方法如下:

1:取GroupBox的区域,并保存四个值  左,上,右,下

//获取屏幕坐标

((CWnd*)GetDlgItem(IDC_STATIC_CHART))->GetWindowRect(rect);

//计算x轴y轴基本单位

int dx = (rect.right-rect.left)/50;

int dy = (rect.bottom-rect.top)/80;

//转换成对话框坐标

ScreenToClient(rect);

//保存4个值

int L = rect.left,R = rect.right,T = rect.top,B = rect.bottom;

GroupBox的区域我忘记标出来了,就在上面图中柱状图那一块

2:获取DC,这一步没什么好说的

CPaintDC dc(this);

3:画X轴,Y轴

//X

dc.MoveTo(L+dx*2,B-dy*3);

dc.LineTo(L+dx*49,B-dy*3);

//最后的那个箭头

dc.MoveTo(L+dx*49,B-dy*3);

dc.LineTo(L+dx*48,B-dy*2);

dc.MoveTo(L+dx*49,B-dy*3);

dc.LineTo(L+dx*48,B-dy*4);

Y轴同理,但是考虑到dx,dy的值不一样,当画Y轴的箭头时,需要交换dx和dy的位置

//纵坐标线 dc.MoveTo(L+dx*2,B-dy*3); 

dc.LineTo(L+dx*2,B-dy*77); 

dc.MoveTo(L+dx*2,B-dy*77); 

//交换了dx,dy的位置

dc.LineTo(L+dx*2-dy,B-dy*77+dx); 

dc.MoveTo(L+dx*2,B-dy*77); 

//交换了dx,dy的位置

dc.LineTo(L+dx*2+dy,B-dy*77+dx);

绘制完结果如图:

4:画柱状图,这里主要根据前面计算dx,dy时,划分的数量来计算每个柱的宽度,以及柱间的间隔

//第一个柱状体的左下坐标

int x = L+dx*3;

int y = B-dy*3;

for(int i=0;i

CRect rc;

rc.left=x+i*dx*9;

rc.right=rc.left+dx*7;

rc.bottom=y;

rc.top=rc.bottom-dy*answer[index][i+1];

//这里把柱状图的信息输出,这里输出的是一个数字,因为要转换成字符串,比较麻烦

//处理了一下,肯定有简洁的处理方式,但是我也懒得去想了,我很懒的

dc.SetBkMode(TRANSPARENT);//设置透明背景,要不然输出文字之后会有一块白,难看

char num[10];

sprintf(num,"%d",answer[index][i+1]);

CString strnum(num);

dc.TextOutW((rc.left+rc.right)/2-dx,rc.bottom-dy*(answer[index][i+1]+3),strnum);

//画刷是我之前就定义好的,直接拿来用

dc.FillRect(&rc,brushs+i);

}

5:添加控件消息响应函数

维护一个全局变量index来保存当前题号,创建重绘函数updateInfo

void CEnglishReportDlg::updateInfo(){

int count = choose_c[index];

int i;

//选项存在,赋值,L是宏命令与TEXT()相同功能

for(i=0;i

m_strLable[i] = choose[index][i];

}

//无此选项,置空

for(;i<5;i++)

m_strLable[i] = L"";

m_strTopic = topics[index];

//获取GroupBox区域,并转换成对话框坐标

CRect rect;

((CWnd*)GetDlgItem(IDC_STATIC_CHART))->GetWindowRect(rect);

ScreenToClient(rect);

//重绘此区域

InvalidateRect(rect);

//将控件变量更新到前台

UpdateData(FALSE);

}

函数1:响应ListBox的SelChange事件

void CEnglishReportDlg::OnLbnSelchangeListTopic()

{

// TODO: 在此添加控件通知处理程序代码

index = m_listtopic.GetCurSel();

updateInfo();

}

函数2:上一页按钮的Click事件

void CEnglishReportDlg::OnBnClickedButtonPre()

{

// TODO: 在此添加控件通知处理程序代码

if(index>0)

index--;

updateInfo();

m_listtopic.SetCurSel(index);

}

函数3:下一页按钮的Clicl事件

void CEnglishReportDlg::OnBnClickedButtonNext()

{

// TODO: 在此添加控件通知处理程序代码

if(index<19)

index++;

updateInfo();

m_listtopic.SetCurSel(index);

}

至此基本的功能都已经实现了,还差最后一步:

6:初始化对话框

for(int i=0;i<20;i++){

m_listtopic.AddString(topics[i]);

}

//index初始化为0,直接刷新

updateInfo();

m_listtopic.SetCurSel(index);

运行结果如下:

热心网友 时间:2023-11-14 21:38

在对话框界面上画出统计后的柱状图。 提示:在OnPaint()函数中加入画线代码: CDC* pDC = GetDC(); //利用MFC的CDC类实现画线 CPoint pt1,pt2; //定义起点、终点 pt1.x = 100; pt1.y = 100; pt2.x = 200; pt2.y = 200; pDC->MoveTo(pt1); //线的起点 pDC->LineTo(pt2); //线的终点 ReleaseDC(pDC); //释放CDC 满意答案 网友回答 来自太平洋电脑网 - 第一专业IT门户网站2013-07-29读文件: int nData[20]; FILE *fpTxt; if( ( fpTxt = fopen ("C:\\1.txt","r")) == NULL ) { MessageBox("打开文件失败","系统警告",MB_OK); return; } for(int i=0;i>

热心网友 时间:2023-11-14 21:38

可以用MSChart。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
谷歌浏览器怎么设置成中文_谷歌浏览器设置中文语言 【谷歌浏览器技巧】谷歌浏览器如何更改语言? 史上最全ETF全解 证券ETF是深市的吗 怎样把莲藕肉丸子做的好吃? 高三语文小说赏析小说形象分析与答题技巧 人物形象题答题技巧 借助什么分析小说的人物形象 脖子旁边疼是什么原因 在群里不是好友怎么把群里人建另一个群 问题,GTR仪表故障灯亮怎么解决 gtr仪表内出现vdc灯亮是怎么回事? 平板电脑怎么清理储存空间 平板电脑运行内存不足要怎么办? 平板原神磁盘空间不足怎么清理? 平板电脑运行内存不足怎么办 ppt幻灯片放映方式 PPT都有哪些幻灯片放映快捷键 ppt怎么调成拓展模式 电话手表怎么发信息用来验证 华为手表3+pro超能版怎么发短信 小米电话手表发信息只能语音吗 糖猫电话手表怎么发短信 手表可以发短信给别人吗?怎么操作? 《烟雨江湖》生生造化丹配方是什么? 烟雨江湖虎鞭酒配方是什么? 《烟雨江湖》菜谱汇总是什么? 烟雨江湖金疮药丹方是什么? 烟雨江湖丹药配方 烟雨江湖顺脉丹配方 gtr仪表盘为什么英里 尼桑gtr仪表seervice是什么灯 尼桑gtr r34仪表盘问题 gtr仪表盘怎么又是是220有时是340 GTR是NISSAN的? 日产GTR详细车型 GTR 美规的速度表盘能不能换成公里的 汽车里的GTR是啥意思?比如N|SSAN GTR? gtr是什么车多少钱 宝马汽车仪表盘符号图解是什么? 日产GTR的参数 【车主点评:日产战神GTR 3.8TT动力战神归来】 GTR最高时速是多少 请专家指点下 NISSAN GTR优缺点各是什么 日产又一“战神”亮相!号称平民版GTR,3.0T爆304匹 日产GT-R SPEC V的资料 怎么查看个人养老保险费缴费情况 怎么查养老保险缴费情况 养老保险扣费怎么查询 如何查询个人养老保险账户余额查询