计算机图形学实验报告—正文
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
设计1 环境设置 (实验环境 microsoft visual studio 2010) 一、实验目的
1.掌握图形驱动程序及图形模式的基本概念,掌握图形初始化方法;
2.掌握进行图形程序设计的基本方法;
3.了解的图形功能,了解常见的图形库函数;
二、实验要求
1.图形系统初始化;
2.综合应用图形库函数,进行图形设计与绘制;
3.熟悉开发环境,要求会对程序进行编辑,编译,调试
三、设计说明
图形系统初始化以及主要代码:
#include "stdafx.h"
#include
#include
using namespace std;
LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)//回调函数
{
HDC hdc ; //设备句柄
PAINTSTRUCT ps ; //绘图结构
RECT rect,rc ; //矩形结构
HBRUSH hBrush; //刷子
HPEN hpen; //笔
SYSTEMTIME tm; //定义时间结构体变量
switch (message) //从回调函数的参数据中传入的值,是系统执行回调函数之后的结果体现
{
case WM_PAINT: //画矩形
hdc = BeginPaint (hwnd, &ps) ;//准备指定的窗口来重绘并将绘画相关的信息放到一个
PAINTSTRUCT结构中
SetTextColor(hdc,RGB(0,255,255));//设置指定设备环境(HDC)的字体颜色
TextOut(hdc,10,160, TEXT("画出直线!"),16);//该函数用当前选择的字体、背景颜色和正文颜色将一个字符串写到指定位置
MoveToEx(hdc,200,100,NULL);//将当前绘图位置移动到某个具体的点,同时也可获得之前位置的坐标。开始画线,从100,100开始
LineTo(hdc,300,400);//用当前画笔画一条线,从当前位置连到一个指定的点。这个函数调用完毕,当前位置变成x,y
/*以下是画笔的用法,函数原型是BOOL CreatePen(int nPenStyle, int nWidth, COLORREF crColor); 功能是:用指定的样式、宽度和颜色创建一个画笔
参数(1)nPenStyle指定画笔样式,可以是下述常数之一,PS_SOLID画笔画出的是实线;PS_DASH 画笔画出的是虚线(nWidth必须是1);PS_DOT画笔画出的是点线(nWidth必须是1);
PS_DASHDOT画笔画出的是点划线(nWidth必须是1);PS_DASHDOTDOT画笔画出的是点-点-划线(nWidth必须是1);PS_NULL画笔不能画图;PS_INSIDEFRAME画笔在由椭圆、矩形、圆
角矩形、饼图以及弦等生成的封闭对象框中画图。如指定的准确RGB颜色不存在,就进行抖动处理。
参数(2)nWidth 以逻辑单位表示的画笔的宽度
参数(3)crColor画笔的RGB颜色
返回值:如函数执行成功,就返回指向新画笔的一个句柄;否则返回零。一旦不再需要画笔,记得用DeleteObject函数将其删除。*/
hpen=CreatePen(PS_SOLID,5,RGB(0,255,0));//获得刷子
SelectObject(hdc,hpen);//选择你获得的刷子。该函数选择一对象到指定的设备上下文环境中,该新对象替换先前的相同类型的对象。原型:HGDIOBJ SelectObject(HDC hdc, HGDIOBJ hgdiobj)
MoveToEx(hdc,200,200,NULL);//刷子的起点
LineTo(hdc,500,500);//刷子的结束点
/*下面的函数取得客户端的矩形,rect和rc为用户定义的矩形结构变量。该函数获取窗口客户区的坐标。客户区坐标指定客户区的左上角和右下角。由于客户区坐标是相对窗口客户区的左上角而言的,因此左上角坐标为(0,0),函数原型BOOL GetClientRect(HWND hWnd,LPRECT lpRect );第一个参数为窗口句柄,第二个参数为客户区坐标*/
GetClientRect (hwnd, &rect);
rc.left=rect.left+300;//客户端矩形的左上方点加400像素
rc.top=rect.top+300;
rc.right=rect.right-50;
rc.bottom=rect.bottom-20;
/*下面的函数创建一个具有指定颜色的逻辑刷子。函数原理:HBRUSH CreateSolidBrush(COLORREF crColor);参数crColor:指定刷子的颜色。返回值:如果该函数执行成功,那么返回值标识一个逻辑实心刷子;如果函数失败,那么返回值为NULL。实心刷子实际上就是指系统用来绘制要填充图形的内部区域的位图。在应用程序调用CreateSolidBrush创建刷子以后,可以通过调
用SelectObject函数把该刷子选入设备环境。*/
hBrush=CreateSolidBrush(RGB(0,255,255));//创建刷子,并变化矩形中的颜色
FillRect(hdc,&rc,hBrush);//用指定的画刷填充矩形,此函数包括矩形的左上边界,但不包括矩形的右下边界。原型:int FillRect(HDC hdc, CONST RECT *lprc, HBRUSH hbr)
/*以下函数用来设置背景色,hDC是当前设备的句柄,mode是要设置的模式,其值可以为OPAQUE 和TRANSPARENT。比如按钮的文字颜色是黑色的,而背景是灰色的,这就需要使用SetBkMode函数来设置DrawText函数的输出方式,OPAQUE的方式是用当前背景的画刷的颜色输出显示文字的背景,而TRANSPARENT是使用透明的输出,也就是文字的背景是不改变的。*/
SetBkMode(hdc,TRANSPARENT);//设置背景为透明色
/*以下函数用来设置指定设备环境(HDC)的字体颜色,原型为DWORD SetTextColor (HDC, DWORD),其中DWORD是关于颜色的参数,常用RGB()获取。当然设备环境(HDC)要通过
BeginPaint(HWND,&PAINTSTRUCTURE)或GetDC(HWND)获得。*/
SetTextColor(hdc,RGB(255,255,0));//设置文本的颜色
/*以下函数在指定的矩形里写入格式化的正文,根据指定的方法对正文格式化(扩展的制表符,字符对齐、折行等)。 */
DrawText(hdc, TEXT ("画出矩形!"), -1, &rc,DT_SINGLELINE | DT_CENTER | DT_VCENTER) ;//单行模式|中心对齐|垂直对齐
//Rectangle(hdc,0,0,50,50);//矩形
//FillRect(hdc,50,50,300,300);//填充矩形
EndPaint (hwnd, &ps) ;//结束画
return 0;
case WM_DESTROY://关闭窗口时的操作
PostQuitMessage (0) ;//弹出一个退出消息框
return 0 ;
}
return DefWindowProc (hwnd, message, wParam, lParam) ;
}
四、运行结果及分析