使用图形界面描述矩形
来源:互联网 发布:redis mysql 性能对比 编辑:程序博客网 时间:2024/06/09 18:40
最近一直在想一些问题,如何在实例中运用算法,在网上看到许多人将算法用在图形界面编程中,这也是个不错的运用,正好我学过一些图形界面编程和一些基本控件的使用,再借助如鹏网的Win32向导,使得界面编程更加简单
我使用一个矩形结构,处理一些矩形中的参数,可以计算矩形的面积、判断两个矩形是否相交
首先搭建成下图所示的图形界面
然后修改控件的ID:
控件的名字
控件的ID
第一个矩形的长度输入框
IDC_LEN
第一个矩形的宽度输入框
IDC_WIDE
第一个矩形左上角X坐标输入框
IDC_X1
第一个矩形左上角Y坐标输入框
IDC_Y1
第二个矩形的长度输入框
IDC_LEN2
第二个矩形的宽度输入框
IDC_WIDE2
第二个矩形左上角X坐标输入框
IDC_X2
第二个矩形左上角Y坐标输入框
IDC_Y2
面积输出框
IDC_AREA1
计算面积按钮
IDC_SUM
相交判断输出框
IDC_XJ
相交判断按钮
IDC_XJ1
首先定义一个矩形类
/*定义一个矩形类*/struct Rect{double X;/*左上角的横坐标*/double Y;/*左上角的纵坐标*/double Length;/*长度*/double Wide;/*宽度*/};
然后定义一些函数用于处理矩形类
函数名
函数功能
void IsString(HWND hwnd, TCHAR *str)
判断数字是否合法
void Area(HWND hwnd, Rect rect)
计算矩形的面积
void Func(HWND hwnd, Rect rect1, Rect rect2)
判断两个矩形是否相交
程序的全部代码
#include "stdafx.h"#include <windows.h>#include <windowsx.h>#include <mmsystem.h>#include "resource.h"#include "MainDlg.h"/*定义一个矩形类*/struct Rect{double X;/*左上角的横坐标*/double Y;/*左上角的纵坐标*/double Length;/*长度*/double Wide;/*宽度*/};/*判断数字是否合法*/void IsString(HWND hwnd, TCHAR *str){/*得到输入的数据*/double num = atof(str);TCHAR Temp[256];/*将数据转换为字符串*/sprintf(Temp, "%g", num);/*判断两个字符串是否相等*/if(0 != lstrcmp(str,Temp)){MessageBox(hwnd, TEXT("你输入的数据非法"), TEXT("判断"), MB_OK|MB_ICONERROR);return;}}/*判断编辑框中是否有数据*/int Str_Empty(HWND hwnd, TCHAR *str){int length = lstrlen(str);if(0 == length){MessageBox(hwnd, TEXT("请输入数据"), TEXT("提醒"), MB_OK|MB_ICONEXCLAMATION);return 0;}else{/*判断数据是否合法*/IsString(hwnd, str);return 0;}}/*计算矩形的面积*/void Area(HWND hwnd, Rect rect){/*保存矩形的长*/TCHAR Length[256];/*保存矩形的宽*/TCHAR Wide[256];/*保存矩形的面积*/TCHAR Area[256];ZeroMemory(Wide, sizeof(Wide));ZeroMemory(Area, sizeof(Area));/*得到矩形的长度*/GetDlgItemText(hwnd, IDC_LEN, Length, sizeof(Length));/*判断编辑框中是否有数据*/Str_Empty(hwnd, Length);/*得到矩形的宽度*/GetDlgItemText(hwnd, IDC_WIDE, Wide, sizeof(Wide));/*判断编辑框中是否有数据*/Str_Empty(hwnd, Wide);rect.Length = atof(Length);rect.Wide = atof(Wide);/*计算矩形的面积*/double area = rect.Length * rect.Wide;sprintf(Area, "%g", area);SetDlgItemText(hwnd, IDC_AREA1, Area);}/*判断两个矩形是否相交*/void Func(HWND hwnd, Rect rect1, Rect rect2){/*保存矩形的长*/TCHAR Length1[256];/*保存矩形的宽*/TCHAR Wide1[256];/*储存矩形左上角的X坐标*/TCHAR str_X1[256];/*储存矩形左上角的Y坐标*/TCHAR str_Y1[256];ZeroMemory(Length1, sizeof(Length1));ZeroMemory(Wide1, sizeof(Wide1));ZeroMemory(str_X1, sizeof(str_X1));ZeroMemory(str_Y1, sizeof(str_Y1));GetDlgItemText(hwnd, IDC_LEN, Length1, sizeof(Length1));Str_Empty(hwnd, Length1);GetDlgItemText(hwnd, IDC_WIDE, Wide1, sizeof(Wide1));Str_Empty(hwnd, Wide1);GetDlgItemText(hwnd, IDC_X1, str_X1, sizeof(str_X1));Str_Empty(hwnd, str_X1);GetDlgItemText(hwnd, IDC_Y1, str_Y1, sizeof(str_Y1));Str_Empty(hwnd, str_Y1);rect1.Length = atof(Length1);rect1.Wide = atof(Wide1);rect1.X = atof(str_X1);rect1.Y = atof(str_Y1);/*保存矩形的长*/TCHAR Length2[256];/*保存矩形的宽*/TCHAR Wide2[256];/*储存矩形左上角的X坐标*/TCHAR str_X2[256];/*储存矩形左上角的Y坐标*/TCHAR str_Y2[256];ZeroMemory(Length2, sizeof(Length2));ZeroMemory(Wide2, sizeof(Wide2));ZeroMemory(str_X2, sizeof(str_X2));ZeroMemory(str_Y2, sizeof(str_Y2));GetDlgItemText(hwnd, IDC_LEN2, Length2, sizeof(Length2));Str_Empty(hwnd, Length2);GetDlgItemText(hwnd, IDC_WIDE2, Wide2, sizeof(Wide2));Str_Empty(hwnd, Wide2);GetDlgItemText(hwnd, IDC_X2, str_X2, sizeof(str_X2));Str_Empty(hwnd, str_X2);GetDlgItemText(hwnd, IDC_Y2, str_Y2, sizeof(str_Y2));Str_Empty(hwnd, str_Y2);rect2.Length = atof(Length2);rect2.Wide = atof(Wide2);rect2.X = atof(str_X2);rect2.Y = atof(str_Y2);/*当第一个矩形的右上角的横坐标小于小于第二个矩形的左上角的横坐标时,不相交*/if((rect1.X + rect1.Length) < rect2.X){SetDlgItemText(hwnd, IDC_XJ, TEXT("这两个矩形不相交"));}/*当第一个矩形的左上角横坐标大于第二个矩形右上角的横坐标时,不相交*/else if(rect1.X > (rect2.X + rect2.Length)){SetDlgItemText(hwnd, IDC_XJ, TEXT("这两个矩形不相交"));}/*当第一个矩形左下角的纵坐标大于第二个矩形的左上角的纵坐标时,不相交*/else if((rect1.Y - rect1.Wide) > rect2.Y){SetDlgItemText(hwnd, IDC_XJ, TEXT("这两个矩形不相交"));}/*当第一个矩形左上角的纵坐标小于第二个矩形左下角的纵坐标时,不相交*/else if(rect1.Y < (rect2.Y - rect2.Wide)){SetDlgItemText(hwnd, IDC_XJ, TEXT("这两个矩形不相交"));}else{SetDlgItemText(hwnd, IDC_XJ, TEXT("这两个矩形相交"));}}BOOL WINAPI Main_Proc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam){ switch(uMsg) { HANDLE_MSG(hWnd, WM_INITDIALOG, Main_OnInitDialog); HANDLE_MSG(hWnd, WM_COMMAND, Main_OnCommand);HANDLE_MSG(hWnd,WM_CLOSE, Main_OnClose); } return FALSE;}BOOL Main_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam){ return TRUE;}void Main_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify){ switch(id) { /*计算矩形的面积*/case IDC_SUM:{Rect rect;/*计算矩形的面积*/Area(hwnd, rect);} break; /*判断矩形是否相交*/case IDC_XJ1:{Rect rect1, rect2;Func(hwnd,rect1,rect2);}break; default:break; }}void Main_OnClose(HWND hwnd){ EndDialog(hwnd, 0);}
执行结果
计算矩形的面积
当输入的不是数字时
当没有输入数据时
相交判断
点击下载程序
2 0
- 使用图形界面描述矩形
- 最大的矩形问题描述
- Linux是否使用图形界面
- Linux远程使用图形界面
- solr Query 图形界面使用
- Git图形界面的使用
- Git图形界面的使用
- Git图形界面的使用
- Git图形界面的使用
- Git图形界面的使用
- 使用GDI绘制矩形
- 使用GDI绘制矩形
- 使用画笔填充矩形
- 使用鼠标绘制矩形
- graphics2d使用画矩形
- 使用xmanager访问linux图形界面
- 图形界面程序使用控制台窗口
- Ubuntu 12.04 使用gnome3图形界面
- .net MVC 验证码
- Android开发之文本颜色改变
- 马程序员学习笔记——红黑树解析三
- poj-1015
- 控件重写
- 使用图形界面描述矩形
- dynamic_cast
- Opencv摄像机的标定
- 关于card视图
- shared memory realm does not exist
- C、 C++遍历文件夹,删除文件夹
- ios----全面的文件管理操作讲解
- Codeforces Round #250 (Div. 2)——The Child and Set
- 获取本地设备IP地址