计算机图形初上手

--------------------Configuration: PenBrush - Win32 Debug--------------------
Compiling...
PenBrushView.cpp
d:\program files (x86)\microsoft visual studio\myprojects\penbrush\penbrushview.cpp(4) : fatal error C1083: Cannot open precompiled header file: ‘Debug/PenBrush.pch‘: No such file or directory
Error executing cl.exe.

PenBrushView.obj - 1 error(s), 0 warning(s)
答:当按F4,错误定位到#include "stdafx.h";解决方法“这是编译时出现的错误,可暂不管这个错误,继续链接,可发现链接无误,如下
--------------------Configuration: PenBrush - Win32 Debug--------------------
Compiling resources...
Compiling...
StdAfx.cpp
Compiling...
PenBrush.cpp
MainFrm.cpp
PenBrushDoc.cpp
PenBrushView.cpp
Generating Code...
Linking...

PenBrush.exe - 0 error(s), 0 warning(s)
这时我们再次对这个工程进行编译就会这样
--------------------Configuration: PenBrush - Win32 Debug--------------------
Compiling...
Skipping... (no relevant changes detected)
PenBrushView.cpp

PenBrushView.obj - 0 error(s), 0 warning(s)
可以看到之前报的错误消失。这时再次链接,得到
--------------------Configuration: PenBrush - Win32 Debug--------------------
Linking...

PenBrush.exe - 0 error(s), 0 warning(s)
如此可以解决问题。
代码部分
CRect rect;
GetClientRect(rect);
pDC ->SetMapMode(MM_ANISOTROPIC);
pDC ->SetWindowExt(rect.Width(), rect.Height());
pDC ->SetViewportExt(rect.Width(), -rect.Height());
pDC ->SetViewportOrg(rect.Width()/2, rect.Height()/2);

rect.OffsetRect(-rect.Width()/2, -rect.Height()/2);
rect.DeflateRect(100, 100);

CPen NewPen, *pOldPen;
NewPen.CreatePen(PS_SOLID, 1, RGB(0, 0, 255));
pOldPen = pDC ->SelectObject(&NewPen);

CBrush NewBrush, *pOldBrush;
NewBrush.CreateSolidBrush(RGB(255, 0, 0));
pOldBrush = pDC ->SelectObject(&NewBrush);

pDC ->Rectangle(&rect);
pDC ->SelectObject(pOldPen);
pDC ->SelectObject(pOldBrush);

代码1
CRect rect;
GetClientRect(rect);
pDC ->SetMapMode(MM_ANISOTROPIC);
pDC ->SetWindowExt(rect.Width(), rect.Height());
pDC ->SetViewportExt(rect.Width(), -rect.Height());
pDC ->SetViewportOrg(rect.Width()/2, rect.Height()/2);
pDC ->Rectangle(rect);
这时得到的长方形显示在第一象限,而且只能显示它的一部分(左下角部分)

代码2
CRect rect;
GetClientRect(rect);
pDC ->SetMapMode(MM_ANISOTROPIC);
pDC ->SetWindowExt(rect.Width(), rect.Height());
pDC ->SetViewportExt(rect.Width(), -rect.Height());
pDC ->SetViewportOrg(rect.Width()/2, rect.Height()/2);

rect.OffsetRect(-rect.Width()/2, -rect.Height()/2);

CPen NewPen, *pOldPen;
NewPen.CreatePen(PS_SOLID, 1, RGB(0, 0, 255));
pOldPen = pDC ->SelectObject(&NewPen);

pDC ->Rectangle(rect);
这时得到的长方形就会是视图区范围

代码3
CRect rect;
GetClientRect(rect);
pDC ->SetMapMode(MM_ANISOTROPIC);
pDC ->SetWindowExt(rect.Width(), rect.Height());
pDC ->SetViewportExt(rect.Width(), -rect.Height());
pDC ->SetViewportOrg(rect.Width()/2, rect.Height()/2);

rect.OffsetRect(-rect.Width()/2, -rect.Height()/2);
rect.DeflateRect(100, 100);

CPen NewPen, *pOldPen;
NewPen.CreatePen(PS_SOLID, 1, RGB(0, 0, 255));
pOldPen = pDC ->SelectObject(&NewPen);

pDC ->Rectangle(rect);
这时长方形就会缩小居中

回到最初的代码部分
在里面有这样的一段代码
CPen NewPen, *pOldPen;
NewPen.CreatePen(PS_SOLID, 1, RGB(0, 0, 255));
pOldPen = pDC ->SelectObject(&NewPen);

CBrush NewBrush, *pOldBrush;
NewBrush.CreateSolidBrush(RGB(255, 0, 0));
pOldBrush = pDC ->SelectObject(&NewBrush);
知道它是创建画笔和画刷,并将它们选入设备上下文
然后在绘制时
pDC ->Rectangle(&rect);
可以看到,并没有什么颜色参数在里面;Pen用来画线,Brush用来填充;当用户没有创建画笔和画刷就是“黑笔白刷”。
这样,图形是会被覆盖的,底层的会被后来的上层给覆盖。
下面的代码可以解释这种情形
CRect rect;
GetClientRect(rect);
pDC ->SetMapMode(MM_ANISOTROPIC);
pDC ->SetWindowExt(rect.Width(), rect.Height());
pDC ->SetViewportExt(rect.Width(), -rect.Height());
pDC ->SetViewportOrg(rect.Width()/2, rect.Height()/2);

rect.OffsetRect(-rect.Width()/2, -rect.Height()/2);
rect.DeflateRect(100, 100);

CPen NewPen, *pOldPen;
NewPen.CreatePen(PS_SOLID, 1, RGB(0, 0, 255));
pOldPen = pDC ->SelectObject(&NewPen);

pDC ->Rectangle(rect);

CBrush NewBrush, *pOldBrush;
NewBrush.CreateSolidBrush(RGB(255, 0, 0));
pOldBrush = pDC ->SelectObject(&NewBrush);

pDC ->RoundRect(rect, CPoint(50, 50));

pDC ->SelectObject(pOldPen);
pDC ->SelectObject(pOldBrush);
这里先绘的长方形是“蓝边白面”,而后绘的钝角长方形是“蓝边红面”。

时间: 2024-10-14 00:33:41

计算机图形初上手的相关文章

Android 5.0 Lollipop初上手体验

在等了好几天还没有等到OTA升级提示,前天笔者给Nexus4线刷入了官方提供的Lollipop的镜像,在试用了这两天之后,现在总结下自己感觉很惊艳的地方和一些地方的吐槽.(点击图片可以查看大图) 1.Material Design: 不得不说,这次的UI风格与用户交互改变很大,主要的就是谷歌推行的Material Design,刚开始看着和用着都觉得挺别扭,但是一旦接受了这个设定,还是挺带感的括弧笑. 典型的用户界面与交互设计可以参考Gmail,不得不说,Gmail一直是谷歌给开发者设计应用的规

Kali Linux 初上手记录 初始版本1.0.9

一直学的都是理论方面的东西,最近想多搞一搞具体的技术.于是从Kali Linux开始,做一些渗透练习,慢慢敲定,以后做些什么. 这里主要是记录一些过程中犯的错误和一些经验总结. 也许是因为4.1愚人节开始学习吧,我认为kali一直在和我开玩笑,以至于我随时都不知道自己今天能进步多少. 开始使用2016.1版本,毕竟此时是最新的嘛,然后发现好多不一样,又回到1.0.9版本,然后又用2016.1版本.反正各种交错使用.以后更多用2016.1吧我估计,不过我也不敢确定. 第一天  4.1: 这里视频是

Linux初上手!

虚拟机Virtual Box装的Kali Linux,是Debian的发行版本,安装过程不说了,不是硬盘安装也没什么说的,由于是新手所以只有两个分区,一个[/]和一个[swap] 装好之后是xwindow的界面,可以登录,也可以ctrl+alt+F1~F6切换六个文字终端,需要注意的是文字终端登录时输密码小键盘是不能用的. 接下来是几个常用的命令,主要是在线帮助命令可以查到很多命令 man [命令] 这个可以获取输入命令的帮助,用法,还有类似的一个命令info 接下来是下载软件,不同的版本Lin

试用时间序列数据库InfluxDB

Hadoop集群监控需要使用时间序列数据库,今天花了半天时间调研使用了一下最近比较火的InfluxDB,发现还真是不错,记录一下学习心得. Influx是用Go语言写的,专为时间序列数据持久化所开发的,由于使用Go语言,所以各平台基本都支持.类似的时间序列数据库还有OpenTSDB,Prometheus等. OpenTSDB很有名,性能也不错,但是基于HBase,要用那个还得先搭一套HBase,有点为了吃红烧肉自己得先去杀猪,烫皮,拔毛的感觉.Prometheus相关文档和讨论太少,而Influ

晋峰金银业:亏了生意本得来的血淋淋的经验——EA交易初级测试真实数据带图

时至今日我炒金两年多了,起初对这一行业非常陌生,虽然我有好几年炒股的经验,对主要技术指标也谙熟于心,虽然炒金和炒股的技术指标没差,但黄金的波动比股票大多了,也有更激荡人心,毕竟双向交易,初上手,大家都觉得一个波浪都是一个行情,再加上杠杆,马上就全身心扑到炒金上面来了,刚开始是赚多亏少,几个月下来,在一次非农,我一夜赚得比在股市一年还多,各种欣喜若狂,马上带着家人新马泰游了一圈. 常在河边走,哪有不湿鞋的道理.有的时候一晚就赚我几个月的生意钱,渐渐的放松了警惕,钱来的容易了,嫌资金少,就把生意赚的

linux复习

linux的特点           - 免费的/开源           - 支持多线程/多用户           - 安全性好           - 对内存和文件管理优越       关机命令       shutdown -h now(立即进行关机)      shutdown -r now (现在重新启动计算机)      reboot (现在重新启动计算机)       进入桌面       startx       用户登录       登录时尽量少用root账户登录,因为它是系

【TensorFlow_Fold】计算图连接初探 Diamond计算图调试历程

0x00 前言 先前开了个TFF自学的坑,震惊于计算图连接的陷阱之多,代码之繁,头砸键盘于第二篇文章的Markdown前: 哦第二篇我指的是名字类似是<[TensorFlow_Fold]深度探究 Blocks for Composition (未完成)>的东西: 进行到计算图不同的block间的连接这一部分,但是td中琳琅满目的函数对输入输出却有着千奇百怪的格式需求,名为TypeError的Exception表示: "二货点你给我走!我不想再看到你!": 调试许久无果,耗时

webpack踩坑之路——构建基本的React+ES6项目

webpack是最近比较火的构建工具,搭配上同样比较火的ReacJS与ES6(ES2015)一定是现在很多潮流 programmer 的追求. 废话不多,下面就就看下如何从0搭起我们的构建工具. 安装 全局安装webpack,如果安装后还是提示没有webpack commond,可以尝试通过超级管理员身份安装. $ npm install webpack -g $ sudo npm install webpack -g  或者在项目里进行安装 $ npm install webpack --sa

Phalcon下命令行应用(command line applications)

今天打算在phalcon项目下加入一个定时任务,来发送邮件. 看了官网的例子,配置和运行都少许杂乱,还有个bug,见备注, 我这边主要讲解如何将command line 的配置独立出来,如果初上手的同学,建议先运行官网第一个例子,成功后,再实践一下官网第二个例子,出现报错,就看我备注,然后再看我这如何将配置独立处理. 借鉴思想:主要借鉴Yii框架中,类似功能commands的配置console.php. 第一步:在app下的tasks文件夹下建三个文件: cl_config.php    //直