柱形图及饼图显示数据统计

  1 #include <Windows.h>
  2 #include <tchar.h>
  3 #include <math.h>
  4 BOOLEAN InitWindowClass(HINSTANCE hInstance, int nCmdShow);
  5 LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
  6 int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
  7 {
  8     MSG msg;
  9     if (!InitWindowClass(hInstance, nCmdShow))
 10     {
 11         MessageBox(NULL, L"创建窗口失败!", _T("创建窗口"), NULL);
 12         return 1;
 13     }
 14     while (GetMessage(&msg, NULL, 0, 0))
 15     {
 16         TranslateMessage(&msg);
 17         DispatchMessage(&msg);
 18     }
 19     return(int)msg.wParam;
 20 }
 21
 22 LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
 23 {
 24     HDC hDC;
 25     PAINTSTRUCT ps;
 26     HBRUSH hBrush;
 27     HPEN hPen;
 28     RECT clientRect;
 29     static RECT oldClientRect = { 0, 0, 0, 0 };
 30     float sita = 0;
 31     int a[4] = { 75, 50, 60, 90 }, maxValue, i, xOrg, yOrg, deltaX, deltaY, xBegin, yBegin, xEnd, yEnd, s = 0;
 32     int hatchBrushStyle[4] = { HS_BDIAGONAL, HS_FDIAGONAL, HS_CROSS, HS_DIAGCROSS };                //四个阴影样式
 33     COLORREF colorIndex[4] = { RGB(255, 0, 0), RGB(0, 255, 0), RGB(0, 0, 255), RGB(255, 0, 255) };    //四种颜色
 34     switch (message)
 35     {
 36     case WM_PAINT:
 37         maxValue = a[0];
 38         for (i = 0; i < 4; i++)
 39         {
 40             s += a[i];
 41             if (a[i]>maxValue)
 42                 maxValue = a[i];
 43         }                                                                                    //计算所有数据总值和最大值
 44         hDC = BeginPaint(hWnd, &ps);
 45         GetClientRect(hWnd, &clientRect);                                                        //获取用户区的尺寸
 46         if ((clientRect.right - clientRect.left) < 300 || (clientRect.bottom - clientRect.top) < 300)    //判断屏幕尺寸
 47         {
 48             MessageBox(hWnd, L"屏幕尺寸大小,无法绘图!", L"错误信息", 0);
 49             //EndPaint(hWnd, &ps);                                                                //结束绘图
 50             break;
 51         }
 52         hPen = (HPEN)GetStockObject(BLACK_PEN);                                                    //设置画笔为系统预定义的黑色画笔
 53         SelectObject(hDC, hPen);                                                                //选择画笔
 54         Rectangle(hDC, clientRect.left + 10, clientRect.top + 10, clientRect.right - 10, clientRect.bottom - 10);
 55         MoveToEx(hDC, (clientRect.left + clientRect.right) / 2, clientRect.top + 10, NULL);
 56         LineTo(hDC, (clientRect.left + clientRect.right) / 2, clientRect.bottom - 10);                //从窗口的中间将窗口分为左右两部分
 57         //------------------------------以下是在左半部分用柱形图表示的数据分布图------------------------------
 58         xOrg = clientRect.left + 60;
 59         yOrg = clientRect.bottom - 60;                                                            //柱形图的坐标原点
 60         xEnd = (clientRect.left + clientRect.right) / 2 - 50;                                    //坐标轴的最右边
 61         yEnd = yOrg;
 62         deltaX = (xEnd - xOrg - 100) / 4;                                                        //计算水平坐标的单位像素
 63         MoveToEx(hDC, xOrg, yOrg, NULL);
 64         LineTo(hDC, xEnd, yEnd);                                                                //画水平坐标轴
 65         xEnd = xOrg;
 66         yEnd = clientRect.top + 60;                                                            //坐标轴的最上边
 67         MoveToEx(hDC, xOrg, yOrg, NULL);
 68         LineTo(hDC, xEnd, yEnd);                                                                //画垂直坐标轴
 69         deltaY = (yOrg - yEnd - 100) / maxValue;                                                //计算垂直坐标的单位像素
 70         hPen = CreatePen(PS_SOLID, 1, RGB(127, 127, 127));                                        //用灰色作为画笔
 71         SelectObject(hDC, hPen);                                                                //选择画笔
 72         for (i = 0; i < 4; i++)
 73         {
 74             hBrush = CreateHatchBrush(hatchBrushStyle[i], colorIndex[i]);                            //创建带阴影的画刷
 75             SelectObject(hDC, hBrush);                                                            //选择画刷
 76             xBegin = xOrg + deltaX*i;
 77             yBegin = yOrg;
 78             xEnd = xBegin + deltaX;
 79             yEnd = yOrg - a[i] * deltaY;
 80             Rectangle(hDC, xBegin, yBegin, xEnd, yEnd);                                            //每一部分的柱形图
 81         }
 82         //------------------------------以下是在右半部分用饼图表示的数据分布图------------------------------
 83         xOrg = clientRect.left + (clientRect.right - clientRect.left) * 3 / 4 + 10;
 84         yOrg = clientRect.top + (clientRect.bottom - clientRect.top) / 2 + 10;                        //xOrg,yOrg为右半部分的中心点坐标
 85         deltaX = deltaY = min((clientRect.right - clientRect.left) / 4, (clientRect.bottom - clientRect.top) / 2) - 50;
 86         xBegin = xOrg + 10;
 87         yBegin = yOrg;
 88         for (i = 0; i < 4; i++)
 89         {
 90             hBrush = CreateSolidBrush(colorIndex[i]);                                            //创建单色的画刷
 91             SelectObject(hDC, hBrush);                                                            //选择画刷
 92             sita = sita + 2 * 3.1415*a[i] / s;
 93             xEnd = xOrg + 10 * cos(sita);
 94             yEnd = yOrg - 10 * sin(sita);                                                        //计算饼图终点的坐标
 95             Pie(hDC, xOrg - deltaX, yOrg - deltaY, xOrg + deltaX, yOrg + deltaY, xBegin, yBegin, xEnd, yEnd);//各部分饼图
 96             xBegin = xEnd;
 97             yBegin = yEnd;                                                                    //下次饼图起点的坐标
 98         }
 99         DeleteObject(hPen);
100         DeleteObject(hBrush);
101         EndPaint(hWnd, &ps);                                                                    //结束绘图
102         break;
103     case WM_SIZE:                                                                                //窗口尺寸发生变化时,应刷新窗口
104         InvalidateRect(hWnd, NULL, true);
105         break;
106     case WM_DESTROY:
107         PostQuitMessage(0);                                                                    //调用PostQuitMessage发出WM_QUIT消息
108         break;
109     default:
110         return DefWindowProc(hWnd, message, wParam, lParam);                                        //默认时采用系统消息默认处理函数
111         break;
112     }
113     return 0;
114 }
115 BOOLEAN InitWindowClass(HINSTANCE hInstance, int nCmdShow)
116 {
117     WNDCLASSEX wcex;
118     HWND hWnd;
119     TCHAR szWindowClass[] = L"窗口示例";
120     TCHAR szTitle[] = L"柱形图及饼图显示数据统计";
121     wcex.cbSize = sizeof(WNDCLASSEX);
122     wcex.style = 0;
123     wcex.lpfnWndProc = WndProc;
124     wcex.cbClsExtra = 0;
125     wcex.cbWndExtra = 0;
126     wcex.hInstance = hInstance;
127     wcex.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_APPLICATION));
128     wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
129     wcex.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
130     wcex.lpszMenuName = NULL;
131     wcex.lpszClassName = szWindowClass;
132     wcex.hIconSm = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_APPLICATION));
133     if (!RegisterClassEx(&wcex))
134         return FALSE;
135     hWnd = CreateWindow(
136         szWindowClass,
137         szTitle,
138         WS_OVERLAPPEDWINDOW,
139         CW_USEDEFAULT, CW_USEDEFAULT,
140         CW_USEDEFAULT, CW_USEDEFAULT,
141         NULL,
142         NULL,
143         hInstance,
144         NULL
145         );
146     if (!hWnd)
147         return FALSE;
148     ShowWindow(hWnd, nCmdShow);
149     UpdateWindow(hWnd);
150     return TRUE;
151 }
时间: 2024-08-28 18:40:45

柱形图及饼图显示数据统计的相关文章

highcharts 饼图显示数据比例如何保留二位小数

var NewPerCent=parseFloat(NewPerCent.toString()).toFixed(2);return '<b>'+ this.point.name +'</b>: '+ Highcharts.numberFormat(this.percentage) +' %';

jquery实现柱形图、饼图等

主要借助 百度开发的开源的echarts.js插件,挺好用的.(自行查看官网) https://www.echartsjs.com/examples/zh/index.html#chart-type-bar 在官网实例上部分没有在对应的图形上面显示数据,所以记录下: 主要是添加label来实现在图形上显示对于的数据 饼图显示数据: option1 = { title: { text: '学历统计', subtext: '', x: 'center' }, tooltip: { trigger:

java实现各种数据统计图(柱形图,饼图,折线图)

近期在做数据挖掘的课程设计,须要将数据分析的结果非常直观的展现给用户,这就要用到数据统计图,要实现这个功能就须要几个第三方包了: 1.       jfreechart-1.0.13.jar 2.       jcommon-1.0.16.jar 3.       gnujaxp.jar 先来看一下,终于效果图: 主要是jfreechart-1.0.13.jar,但这三个包要齐全,我已经将全部与jfreechart有关的jar包与本文实例的project(代码)一同压缩上传了,有兴趣的同学能够下

java利用JFreeChart实现各种数据统计图(柱形图,饼图,折线图)

最近在做数据挖掘的课程设计,需要将数据分析的结果很直观的展现给用户,这就要用到数据统计图,要实现这个功能就需要几个第三方包了: 1.       jfreechart-1.0.13.jar 2.       jcommon-1.0.16.jar 3.       gnujaxp.jar 先来看一下,最终效果图: 主要是jfreechart-1.0.13.jar,但这三个包要齐全,我已经将所有与jfreechart有关的jar包与本文实例的工程(代码)一同压缩上传了,有兴趣的同学可以下载, 下载地

Pandas日期数据处理:如何按日期筛选、显示及统计数据

前言 pandas有着强大的日期数据处理功能,本期我们来了解下pandas处理日期数据的一些基本功能,主要包括以下三个方面: 按日期筛选数据 按日期显示数据 按日期统计数据 运行环境为 windows系统,64位,python3.5. 1 读取并整理数据 首先引入pandas库 import pandas as pd 从csv文件中读取数据 df = pd.read_csv('date.csv', header=None) print(df.head(2)) 0 1 0 2013-10-24 3

ECHARTS柱形图和饼图数值显示

ECHARTS柱形图和饼图数值显示,官方文档写的很不错,这里自己单独梳理一下,以后可能会用的到. 1.柱形图数值显示 在option添加: label:{ normal:{ show: true, position: 'top'} }, 其中position为数值显示的位置,具体属性可以查看官方的配置项. 2.饼图 在option中series添加: itemStyle:{ normal:{ label:{ show: true, formatter: '{b} : {c} ({d}%)', t

Echarts饼图更改颜色、显示数据且换行

var option = {   title : {       text: '数据来源',       x:'center'   },   tooltip : {       trigger: 'item',       formatter: "{a} <br/>{b} : {c} ({d}%)"   },   legend: {       orient: 'vertical',       left: 'left',       data: ['文章','论坛','漏

统计分析基础 (一) 数据统计与图表

统计分析基础 (一)数据统计与图表 1 数据统计 1.1 统计学 统计学是在数据分析的基础上,自17世纪中叶产生并逐步发展起来的一门学科.它是研究如何测定.收集.整理.归纳和分析反映数据,以便给出正确消息的科学.统计广泛地应用在各门学科,从自然科学.社会科学到人文学科,甚至被用来工商业及政府的情报决策之上,目前比较热门的应用:经济学,医学,心理学等.随着大数据(Big Data)时代来临,统计的面貌也逐渐改变,与信息.计算等领域密切结合,是数据科学(Data Science)中的重要主轴之一.

Asp.net管理信息系统中数据统计功能的实现

数据统计是每个系统中必备的功能,在给领导汇报统计数据,工作中需要的进展数据时非常有用. 在我看来,一个统计的模块应该实现以下功能: 能够将常用的查询的统计结果显示出来: 显示的结果可以是表格形式,也可以是图形形式,如果是图形的话能够以多种形式显示(柱状图.折线图.饼图.雷达图.堆叠柱状图等): 统计查询的结果,点击数字或者百分比能够显示详细的数据: 能够自由组合查询条件.筛选条件.分组条件.排序等: 统计结果最好有个实时预览: 查询统计能够保存,以便下次能直接调用并显示统计查询的结果: 对于保存