vc6.0 win32app 数据处理

qq_45368996 qq_45368996 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
根据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应用程序。

wencsh1026

VC++编程范例集锦:从Win32到MFC/ATL的实战指南与项目配置详解

在Windows桌面开发领域,Visual C++(VC++)作为核心开发工具,其技术栈涵盖从底层的Win32 API到经典的MFC、ATL框架,再到现代技术集成。理解其编程模型与项目配置原理,是构建稳定、高效桌面应用的基础。通过系统化的范例代码,开发者可以掌握窗口创建、消息循环、GDI绘图、多线程同步等关键技术,并深入MFC的文档-视图架构与双缓冲渲染,以及ATL的COM组件开发。这些技术价值在于能够直接解决实际开发中的配置复杂性、内存管理及性能优化等工程难题,广泛应用于商业软件、系统工具及行业专用程序的

cnvdkx2837

VC6.0 操作Excel2003

### VC6.0操作Excel2003:详解与步骤#### 1. 环境搭建与初始化为了能够通过VC6.0操作Excel2003文档,首先需要进行必要的环境配置以及初始化工作。

hjt_waves

让vc6.0开发的程序具有windowXP风格

**导入资源文件**:在VC6.0中导入该资源文件,类型选择为24。3.

swk2000

vc++6.0创建窗口代码(win32 application)

在Windows编程领域,VC++ 6.0是一个经典版本,尤其适合初学者学习Win32 API编程。这个压缩包中的内容是关于如何使用VC++ 6.0来创建一个简单的窗口应用程序。

aaa19911126
评论 10
收藏 已收藏
分享
返回顶部
qq_45368996
图形处理/算法 19,463 成员 50,678 内容