vc6.0 win32app 数据处理
根据arr数组中的数据,绘制成下面两个图。

。
目前初步搞定了左边的两个图,下面是我的效果图


我对左边图到右边图的处理方法没有什么头绪,希望有大神可以指点一二

。目前初步搞定了左边的两个图,下面是我的效果图


我对左边图到右边图的处理方法没有什么头绪,希望有大神可以指点一二
#include <windows.h>
#include <stdlib.h>
#include <time.h>
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <winuser.h>
#include <math.h>
#define Pi 3.1415926
const int r = 200;
POINT pts[12];
int num = 7;
double max, min;
int color[12][12];
int Ellipse_color[60][60];
int rgb[20][3];
double divide[20];
int flag;
double arr[144]={
0,0.85,0.55,0.68,0.69,0.88,1.00,1.11,1.36,1.38,1.22,0.89,
0.85,0,0.57,0.45,0.51,0.70,0.80,0.89,1.09,1.18,1.09,0.85,
0.55,0.57,0,0.17,0.20,0.37,0.49,0.54,0.63,0.69,0.69,0.57,
0.68,0.45,0.17,0,0.21,0.49,0.61,0.69,0.82,0.90,0.91,0.77,
0.69,0.51,0.20,0.21,0,0.44,0.53,0.62,0.79,0.91,0.85,0.72,
0.88,0.70,0.37,0.49,0.44,0,0.58,0.92,1.02,1.15,1.13,0.95,
1.00,0.80,0.49,0.61,0.53,0.58,0,1.22,1.19,1.24,1.21,1.08,
1.11,0.89,0.54,0.69,0.62,0.92,1.22,0,0.64,1.43,1.32,1.19,
1.36,1.09,0.63,0.82,0.79,1.02,1.19,0.64,0,1.67,1.51,1.36,
1.38,1.18,0.69,0.90,0.91,1.15,1.24,1.43,1.67,0,1.27,1.40,
1.22,1.09,0.69,0.91,0.85,1.13,1.21,1.32,1.51,1.27,0,1.50,
0.89,0.85,0.57,0.77,0.72,0.95,1.08,1.19,1.36,1.40,1.50,0};
void Findmax_min (double* arr);
void Determine_color (double* arr);
void Determine_Ellcolor ();
void Determine_divide ();
LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM);
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInst,
LPSTR lpszCmdLine, int nCmdShow)
{
HWND hwnd;
MSG Msg;
WNDCLASS wndclass;
char lpszClassName[] = "窗口"; //窗口类名
char lpszTitle[] = "My_Windows"; //窗口标题名
//窗口类的定义
wndclass.style = CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS;//窗口类型为默认类型
wndclass.lpfnWndProc = WndProc; //窗口处理函数为WndProc
wndclass.cbClsExtra = 0; //窗口类无扩展
wndclass.cbWndExtra = 0; //窗口实例无扩展
wndclass.hInstance = hInstance; //当前实例句柄
wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION); //窗口最小化图标为默认图标
wndclass.hCursor = LoadCursor(NULL, IDC_ARROW); //窗口采用箭头光标
wndclass.hbrBackground = (HBRUSH) GetStockObject(WHITE_BRUSH); //窗口背景为白色
wndclass.lpszMenuName = NULL; //窗口中无菜单
wndclass.lpszClassName = lpszClassName; //窗口类名为"窗口示例"
//窗口类的注册
if (!RegisterClass(&wndclass))
{
MessageBeep(0);
return FALSE;
}
hwnd = CreateWindow (
lpszClassName, //窗口类名
lpszTitle, //窗口实例的标题名
WS_OVERLAPPEDWINDOW,//窗口的风格
CW_USEDEFAULT, //默认窗口初始x坐标
CW_USEDEFAULT, //默认窗口初始y坐标
CW_USEDEFAULT, //默认窗口初始x大小
CW_USEDEFAULT, //默认窗口初始y大小
NULL, //窗口无父窗口
NULL, //窗口无主菜单
hInstance, //创建此窗口应用程序的当前句柄
NULL //不适用该值
);
ShowWindow(hwnd, nCmdShow);
UpdateWindow(hwnd);
while (GetMessage(&Msg, NULL, 0, 0))//如果函数取得WM_QUIT之外的其他消息,返回非零值。如果函数取得WM_QUIT,返回零
{
TranslateMessage(&Msg);//讲按键消息转换为字符消息
DispatchMessage(&Msg);//以此消息为参数转发给相应的窗口消息处理程序
}
return Msg.wParam;
}
LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
int i, j;
HDC hdc;
PAINTSTRUCT ps;
HBRUSH hBrush; //定义指向画刷的句柄
HPEN hPen; //定义指向画笔的句柄
RECT rect;
POINT pt;
SIZE size;
TEXTMETRIC tm;
char a[255];
switch (message)
{
case WM_CREATE:
Findmax_min(arr);
Determine_divide();
Determine_color(arr);
//Determine_Ellcolor();
hdc = GetDC(hwnd);
GetClientRect (hwnd, &rect);
pts[0].x = rect.right / 4;
pts[0].y = rect.bottom / 2 - r;
pts[1].x = rect.right / 4 + r / 2;
pts[1].y = rect.bottom / 2 - r * 0.86;
pts[2].x = rect.right / 4 + r * 0.86;
pts[2].y = rect.bottom / 2 - r / 2;
pts[3].x = rect.right / 4 + r;
pts[3].y = rect.bottom / 2;
pts[4].x = rect.right / 4 + r * 0.86;
pts[4].y = rect.bottom / 2 + r / 2;
pts[5].x = rect.right / 4 + r / 2;
pts[5].y = rect.bottom / 2 + r * 0.86;
pts[6].x = rect.right / 4;
pts[6].y = rect.bottom / 2 + r;
pts[7].x = rect.right / 4 - r / 2;
pts[7].y = rect.bottom / 2 + r * 0.86;
pts[8].x = rect.right / 4 - r * 0.86;
pts[8].y = rect.bottom / 2 + r / 2;
pts[9].x = rect.right / 4 - r;
pts[9].y = rect.bottom / 2;
pts[10].x = rect.right / 4 - r * 0.86;
pts[10].y = rect.bottom / 2 - r / 2;
pts[11].x = rect.right / 4 - r / 2;
pts[11].y = rect.bottom / 2 - r * 0.86;
break;
case WM_MOUSEMOVE:
break;
case WM_LBUTTONDOWN:
break;
case WM_KEYDOWN:
break;
case WM_PAINT:
{
hdc = BeginPaint(hwnd, &ps);
GetClientRect (hwnd, &rect);
hPen = CreatePen(PS_SOLID, 1, RGB(211, 211, 211));
SelectObject(hdc, hPen);
hBrush = CreateSolidBrush(RGB(211, 211, 211));
SelectObject(hdc, hBrush);
Ellipse(hdc, rect.right / 4 - r, rect.bottom / 2 - r,
rect.right / 4 + r, rect.bottom / 2 + r);
DeleteObject(hPen);
//hPen = CreatePen(PS_SOLID, 1, RGB(255, 0, 0));
//SelectObject(hdc, hPen);
//Polyline(hdc, pts, 12);
sprintf(a, "max = %lf, min = %lf", max, min);
TextOut(hdc, 0, 0, a, strlen(a));
for (i = 0; i < num; i++)
{
sprintf(a, "divide[%d] = %lf", i, divide[i]);
TextOut(hdc, rect.right / 2 - 60, 40 * (i + 1), a, strlen(a));
}
for (i = 0; i < 12; i++)
{
for (j = i + 1; j < 12; j++)
{
if (color[i][j] == 0)
flag = 0;
if (color[i][j] == 1)
flag = 1;
if (color[i][j] == 2)
flag = 2;
if (color[i][j] == 3)
flag = 3;
if (color[i][j] == 4)
flag = 4;
if (color[i][j] == 5)
flag = 5;
if (color[i][j] == 6)
flag = 6;
if (color[i][j] == 7)
flag = 7;
if (color[i][j] == 8)
flag = 8;
hPen = CreatePen(PS_SOLID, 2, RGB(rgb[flag][0], rgb[flag][1], rgb[flag][2]));
SelectObject(hdc, hPen);
MoveToEx(hdc, pts[i].x, pts[i].y, &pt);
LineTo(hdc, pts[j].x, pts[j].y);
DeleteObject(hPen);
}
}
hPen = CreatePen(PS_SOLID, 1, RGB(211, 211, 211));
SelectObject(hdc, hPen);
Ellipse(hdc, rect.right / 4 * 3 - r, rect.bottom / 2 - r,
rect.right / 4 * 3 + r, rect.bottom / 2 + r);
DeleteObject(hBrush);
EndPaint (hwnd, &ps);
return 0;
}
case WM_DESTROY:
PostQuitMessage (0);//发出WM_QUIT消息,终止消息循环
return 0;
}
//缺省采用系统消息默认处理函数
return DefWindowProc (hwnd, message, wParam, lParam);
}
void Findmax_min (double* arr)
{
int i, j;
char a[255];
max = arr[1];
min = arr[1];
for (i = 1; i < 144; i++)
{
if (max < arr[i])
max = arr[i];
if (min > arr[i] && arr[i] != 0)
min = arr[i];
}
}
void Determine_divide ()
{
double t;
int i;
t = (max - min) / 9;
for (i = 1; i <= num; i++)
{
divide[i - 1] = min + t * i;
}
}
void Determine_color (double* arr)
{
int i, j;
rgb[0][0] = 255;
rgb[0][1] = 0;
rgb[0][2] = 0;
rgb[1][0] = 255;
rgb[1][1] = 69;
rgb[1][2] = 0;
rgb[2][0] = 255;
rgb[2][1] = 169;
rgb[2][2] = 71;
rgb[3][0] = 250;
rgb[3][1] = 140;
rgb[3][2] = 15;
rgb[4][0] = 250;
rgb[4][1] = 165;
rgb[4][2] = 0;
rgb[5][0] = 255;
rgb[5][1] = 255;
rgb[5][2] = 0;
rgb[6][0] = 173;
rgb[6][1] = 255;
rgb[6][2] = 47;
rgb[7][0] = 0;
rgb[7][1] = 255;
rgb[7][2] = 127;
rgb[8][0] = 0;
rgb[8][1] = 255;
rgb[8][2] = 0;
for (i = 0; i < 12; i++)
{
for (j = 0; j < 12; j++)
{
if (arr[i * 12 + j] < divide[0])
color[i][j] = 0;
else if (arr[i * 12 + j] < divide[1])
color[i][j] = 1;
else if (arr[i * 12 + j] < divide[2])
color[i][j] = 2;
else if (arr[i * 12 + j] < divide[3])
color[i][j] = 3;
else if (arr[i * 12 + j] < divide[4])
color[i][j] = 4;
else if (arr[i * 12 + j] < divide[5])
color[i][j] = 5;
else if (arr[i * 12 + j] < divide[6])
color[i][j] = 6;
else if (arr[i * 12 + j] < divide[7])
color[i][j] = 7;
else
color[i][j] = 8;
}
}
}
void Determine_Ellcolor ()
{
}
...全文
相关推荐
使用VC6.0开发Win32 Application程序
在本文中,我们将深入探讨如何使用Microsoft Visual C++ 6.0(简称VC6.0)这个经典且功能强大的IDE来开发Win32应用程序。
VC++编程范例集锦:从Win32到MFC/ATL的实战指南与项目配置详解
在Windows桌面开发领域,Visual C++(VC++)作为核心开发工具,其技术栈涵盖从底层的Win32 API到经典的MFC、ATL框架,再到现代技术集成。理解其编程模型与项目配置原理,是构建稳定、高效桌面应用的基础。通过系统化的范例代码,开发者可以掌握窗口创建、消息循环、GDI绘图、多线程同步等关键技术,并深入MFC的文档-视图架构与双缓冲渲染,以及ATL的COM组件开发。这些技术价值在于能够直接解决实际开发中的配置复杂性、内存管理及性能优化等工程难题,广泛应用于商业软件、系统工具及行业专用程序的
VC6.0 操作Excel2003
### VC6.0操作Excel2003:详解与步骤#### 1. 环境搭建与初始化为了能够通过VC6.0操作Excel2003文档,首先需要进行必要的环境配置以及初始化工作。
让vc6.0开发的程序具有windowXP风格
**导入资源文件**:在VC6.0中导入该资源文件,类型选择为24。3.
vc++6.0创建窗口代码(win32 application)
在Windows编程领域,VC++ 6.0是一个经典版本,尤其适合初学者学习Win32 API编程。这个压缩包中的内容是关于如何使用VC++ 6.0来创建一个简单的窗口应用程序。


图形处理/算法
