百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术分析 > 正文

怎样打造炫酷的图形编程 图型编程

liebian365 2024-10-30 04:51 18 浏览 0 评论

怎么去写好看的图形编程,之前在学校总是接触到的黑窗口方面的程序,并不是很好看。先暂时给一下思路,顺便最后小编拿一个例子的代码发一下。

1 初始化图形窗口

1.1 窗口

1.1.1 初始化

HWND initgraph(

int width,

int height,

);

flag

绘图环境的样式,默认为 NULL。

NOCLOSE:禁用绘图环境的关闭按钮。

NOMINIMIZE:禁用绘图环境的最小化按钮。

SHOWCONSOLE:保留原控制台窗口。

1.1.2 刷新窗口

void cleardevice();

1.1.3 关闭窗口

void closegraph();

1.2 坐标

1.2.1 逻辑坐标(设备坐标)

void setorigin(int x, int y);

1.2.2 物理坐标(文档坐标)

加群466572167,可以交流学习

1.2.3 坐标转换

setorigin(int x, int y)

cX=XX+x;

CY=YY+y;

1.3 函数

1.3.1 格式控制函数

三原色配置颜色:COLORREF RGB(

BYTE byRed, // 颜色的红色部分

BYTE byGreen, // 颜色的绿色部分

BYTE byBlue // 颜色的蓝色部分

);

设置背景颜色:void setbkcolor(COLORREF color);

设置背景模式:void setbkmode(int mode);

mode:

OPAQUE:背景用当前背景色填充(默认)。

TRANSPARENT:背景是透明的。

设置填充颜色:void setfillcolor(COLORREF color);

设置线颜色:void setlinecolor(COLORREF color);

设置文字格式:settextstyle(int width, int height)

1.3.2 图形绘制函数

画图:void circle(

int x,

int y,

int radius

);

画填充圆:void fillcircle(

int x,

int y,

int radius

);

画线:void line(

int x1,

int y1,

int x2,

int y2

);

画填矩形void rectangle(

int left,

int top,

int right,

int bottom

);

画填充矩形void fillrectangle(

int left,

int top,

int right,

int bottom

);

1.3.3 文字输出函数

输出字符串:void outtextxy(

int x,

int y,

LPCTSTR str

);

输出数值,先将数字格式化输出为字符串

char s[5];

sprintf(s, "%d", 1024);

outtextxy(10, 60, s);

1.3.4 图像处理函数

// 从当前绘图设备获取图像

void getimage(

IMAGE* pDstImg, // 保存图像的 IMAGE 对象指针

int srcX, // 要获取图像区域左上角 x 坐标

int srcY, // 要获取图像区域的左上角 y 坐标

int srcWidth, // 要获取图像区域的宽度

int srcHeight // 要获取图像区域的高度

);

// 绘制图像

void putimage(

int dstX, // 绘制位置的 x 坐标

int dstY, // 绘制位置的 y 坐标

IMAGE *pSrcImg, // 要绘制的 IMAGE 对象指针

DWORD dwRop = SRCCOPY // 三元光栅操作码);

// 从图片文件获取图像(bmp/jpg/gif/emf/wmf/ico)

void loadimage(

IMAGE* pDstImg, // 保存图像的 IMAGE 对象指针

LPCTSTR pImgFile, // 图片文件名

int nWidth = 0, // 图片的拉伸宽度

int nHeight = 0, // 图片的拉伸高度

bool bResize = false // 是否调整 IMAGE 的大小以适应图片

);

1.3.5 鼠标处理函数

MOUSEMSG GetMouseMsg();

鼠标信息:struct MOUSEMSG

{

UINT uMsg; // 当前鼠标消息

bool mkCtrl; // Ctrl 键是否按下

bool mkShift; // Shift 键是否按下

bool mkLButton; // 鼠标左键是否按下

bool mkMButton; // 鼠标中键是否按下

bool mkRButton; // 鼠标右键是否按下

int x; // 当前鼠标 x 坐标(物理坐标)

int y; // 当前鼠标 y 坐标(物理坐标)

int wheel; // 鼠标滚轮滚动值

};

2 帮助文档导读

3 图形编程应用

加群466572167,可以交流学习

小编下面写个例子吧,就写一下坦克大战的地图哈: 加下小编的群466572167可以交流学习,群内也有资料下载学习

/*

记住几个函数就可以了

绘图---绘图窗口

*/

//编译器

#define _CRT_SECURE_NO_WARNINGS

#include<graphics.h>

#include <stdio.h>

#include <stdlib.h>

#include <conio.h>

const int rows = 13;

const int cols = 13;

void InitInstance()

{

//0大鸟,1银块 , 2空地,3砖头

int mapIndex[rows][cols] = { 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,

2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2,

2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2,

2, 3, 2, 3, 2, 3, 1, 3, 2, 3, 2, 3, 2,

2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2,

2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,

1, 2, 3, 3, 2, 2, 2, 2, 2, 3, 3, 2, 1,

2, 2, 2, 2, 2, 3, 2, 3, 2, 2, 2, 2, 2,

2, 3, 2, 3, 2, 3, 3, 3, 2, 3, 2, 3, 2,

2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2,

2, 3, 3, 3, 2, 2, 2, 2, 2, 3, 2, 3, 2,

2, 3, 2, 3, 2, 3, 3, 3, 2, 3, 2, 3, 2,

2, 2, 2, 2, 2, 3, 0, 3, 2, 2, 2, 2, 2 };

//文件名字格式化写入

/*

printf()

sprintf(); 可以指定输出的位置

*/

char filename[20] = "";

IMAGE map[4];

//循环把照片放进去

for (int i = 0; i < 4; i++)

{

sprintf(filename, "map%d.jpg", i);

/*

map0.jpg ---filename--map[0]

map1.jpg ---filename--map[1]

map2.jpg ---filename--map[2]

map3.jpg ---filename--map[3]

*/

loadimage(&map[i], filename);

}

int x, y;

for (int i = 0; i < rows; i++)

{

for (int j = 0; j < cols; j++)

{

x = j * 50;

y = i * 50;

putimage(x, y, &map[mapIndex[i][j]]);

/*

mapIndex[i][j],地图函数 0--3

map[i] 0-3

*/

}

}

getchar();

}

int main()

{

//初始化画布: 确定窗口的大小

initgraph(cols*50, rows*50);//图形窗口

InitInstance();

closegraph();//释放窗口

return 0;

}

最终的效果图:

加群466572167可以交流学习

看到最终的效果图感觉怎样,加下小编的群466572167可以交流学习,群内也有资料下载学习。小编只是给大家一个思路,各类型的图形编程,可以这样去写,不然每天对着黑窗口的话,没有感觉,觉得枯燥乏味。

相关推荐

“版本末期”了?下周平衡补丁!国服最强5套牌!上分首选

明天,酒馆战棋就将迎来大更新,也聊了很多天战棋相关的内容了,趁此机会,给兄弟们穿插一篇构筑模式的卡组推荐!老规矩,我们先来看10职业胜率。目前10职业胜率排名与一周前基本类似,没有太多的变化。平衡补丁...

VS2017 C++ 程序报错“error C2065:“M_PI”: 未声明的标识符&quot;

首先,程序中头文件的选择,要选择头文件,在文件中是没有对M_PI的定义的。选择:项目——>”XXX属性"——>配置属性——>C/C++——>预处理器——>预处理器定义,...

东营交警实名曝光一批酒驾人员名单 88人受处罚

齐鲁网·闪电新闻5月24日讯酒后驾驶是对自己和他人生命安全极不负责的行为,为守护大家的平安出行路,东营交警一直将酒驾作为重点打击对象。5月23日,东营交警公布最新一批饮酒、醉酒名单。对以下驾驶人醉酒...

Qt界面——搭配QCustomPlot(qt platform)

这是我第一个使用QCustomPlot控件的上位机,通过串口精确的5ms发送一次数据,再将读取的数据绘制到图表中。界面方面,尝试卡片式设计,外加QSS简单的配了个色。QCustomPlot官网:Qt...

大话西游2分享赢取种族坐骑手办!PK趣闻录由你书写

老友相聚,仗剑江湖!《大话西游2》2021全民PK季4月激燃打响,各PK玩法鏖战齐开,零门槛参与热情高涨。PK季期间,不仅各种玩法奖励丰厚,参与PK趣闻录活动,投稿自己在PK季遇到的趣事,还有机会带走...

测试谷歌VS Code AI 编程插件 Gemini Code Assist

用ClaudeSonnet3.7的天气测试编码,让谷歌VSCodeAI编程插件GeminiCodeAssist自动编程。生成的文件在浏览器中的效果如下:(附源代码)VSCode...

顾爷想知道第4.5期 国服便利性到底需优化啥?

前段时间DNF国服推出了名为“阿拉德B计划”的系列改版计划,截至目前我们已经看到了两项实装。不过关于便利性上,国服似乎还有很多路要走。自从顾爷回归DNF以来,几乎每天都在跟我抱怨关于DNF里面各种各样...

掌握Visual Studio项目配置【基础篇】

1.前言VisualStudio是Windows上最常用的C++集成开发环境之一,简称VS。VS功能十分强大,对应的,其配置系统较为复杂。不管是对于初学者还是有一定开发经验的开发者来说,捋清楚VS...

还嫌LED驱动设计套路深?那就来看看这篇文章吧

随着LED在各个领域的不同应用需求,LED驱动电路也在不断进步和发展。本文从LED的特性入手,推导出适合LED的电源驱动类型,再进一步介绍各类LED驱动设计。设计必读:LED四个关键特性特性一:非线...

Visual Studio Community 2022(VS2022)安装图文方法

直接上步骤:1,首先可以下载安装一个VisualStudio安装器,叫做VisualStudioinstaller。这个安装文件很小,很快就安装完成了。2,打开VisualStudioins...

Qt添加MSVC构建套件的方法(qt添加c++11)

前言有些时候,在Windows下因为某些需求需要使用MSVC编译器对程序进行编译,假设我们安装Qt的时候又只是安装了MingW构建套件,那么此时我们该如何给现有的Qt添加一个MSVC构建套件呢?本文以...

Qt为什么站稳c++GUI的top1(qt c)

为什么现在QT越来越成为c++界面编程的第一选择,从事QT编程多年,在这之前做C++界面都是基于MFC。当时为什么会从MFC转到QT?主要原因是MFC开发界面想做得好看一些十分困难,引用第三方基于MF...

qt开发IDE应该选择VS还是qt creator

如果一个公司选择了qt来开发自己的产品,在面临IDE的选择时会出现vs或者qtcreator,选择qt的IDE需要结合产品需求、部署平台、项目定位、程序猿本身和公司战略,因为大的软件产品需要明确IDE...

Qt 5.14.2超详细安装教程,不会来打我

Qt简介Qt(官方发音[kju:t],音同cute)是一个跨平台的C++开库,主要用来开发图形用户界面(GraphicalUserInterface,GUI)程序。Qt是纯C++开...

Cygwin配置与使用(四)——VI字体和颜色的配置

简介:VI的操作模式,基本上VI可以分为三种状态,分别是命令模式(commandmode)、插入模式(Insertmode)和底行模式(lastlinemode),各模式的功能区分如下:1)...

取消回复欢迎 发表评论: