Windows C
图形程序设计
清华大学出版社
根据教材制作讲稿
2003.3.3.
目录
Windows C 图形程序设计
正文
第2章 Visual C++ 6.0 基本操作
2.2 利用 Visual C++ 6.0 编写应用程序的一般过程
2.2.1 新建项目(P17)
文件—新建—项目(Project)—Win32 应用—
项目名:如,WCTCS(Windows C 图形程序设计);
位置:如,F:/WCTCS;
创建新的工作台(Workspace);
平台(Platforms):Win32
Win32应用—选下列要用的一种:
空项目(An empty project):自己新建立项目;
简单的Win32应用:已经有Win32应用程序;
典型的"Hello World!"应用:已经有"Hello World!"应用程序。
2.2.2 添加代码(P18)
* 新项目窗口—文件视图(File View)—展开 WCTCS File—
右击源文件—添加文件到文件夹—文件名:如,WCTCS
展开源文件—双击 WCTCS.cpp—添加代码;
* 新项目窗口—文件—新建—选下列要用的一种:
头文件(C++ Head File);
源文件(C++ Source File);
资源文件(Resource Script);
填写选项:
添加到项目:如,WCTCS;
文件名:如,WCTCS
位置:如,F:/WCTCS
* 新项目窗口—项目—添加到项目—新建—文件卡—
选下列要用的一种:
头文件(C++ Head File);
源文件(C++ Source File);
资源文件(Resource Script);
填写选项:
添加到项目:如,WCTCS;
文件名:如,WCTCS
位置:如,F:/WCTCS
2.2.3 添加资源(P20)
2.2.3.1 新建资源文件
新项目窗口—项目—添加到项目—新建—
文件卡—资源文件(Resource Script);
填写选项:
添加到项目:如,WCTCS;
文件名:如,WCTCS.rc
位置:如,F:/WCTCS
用户为项目添加的资源会自动保存在资源文件中。
2.2.3.2 新建资源
插入—资源—快捷键、位图、光标、HTML、对话框、图标、
菜单、字符串表、工具条、版本信息。
* 添加包含文件:
工作台—资源视图(Resource View)—资源文件—查看—包含文件。
* 修改资源文件WCTCS.rc中的字符串表 IDS:
工作台—文件视图(File View)—展开 WCTCS File—源文件—
WCTCS.rc—WCTCS.rc的资源列表/资源文本—String Table—
ID:IDS_WCTCS
标题(Caption):Windows C 图形程序设计
* 修改资源头文件 resorce.h 中的标识名 IDC_WCTCS、IDS_WCTCS:
工作台—文件视图(File View)—展开 WCTCS File—头文件—
resorce.h—IDC_WCTCS、IDS_WCTCS。
第3章 Visual C++ 6.0 编辑器的使用
3.3 资源及资源编辑器的概况
3.3.1 资源的概念(P37)
Visual C++ 6.0 可以处理的资源:
快捷键(Accelerator)
对话框(Dialog)
图标(Icon)
菜单(Menu)
工具栏(Toolbar)
光标(Cursor)
字符串列表(String Table)
第5章 Windows 编程基础
5.1 Windows 的界面特性(P86)
1.窗口
接收用户的输入或者显示输出,实现程序和用户的交互作用。
2.客户区(工作区)
显示文字和图形等内容,由应用程序管理和操作。
3.非客户区
包括标题栏、菜单栏、工具栏和状态栏等。由Windows系统管理。
5.2 一个 Windows 示范程序(P87)
Windows 程序基本框架结构:
头文件;
源文件:
1.调用初始化函数,处理消息循环。(P88)
Windows 应用程序入口点:WinMain。
初始化窗口,注册窗口:InitApplication。
创建和显示窗口,初始化应用程序:InitInstance。
进入消息循环,检索到WM_QUIT时,退出循环。
2.初始化窗口,注册窗口
填写窗口类结构参数,注册窗口类(RegisterClass)。
3.保存实例句柄,创建主窗口(P89)
创建主窗口:CreateWindow;
显示窗口:ShowWindow;
更新客户区:UpdateWindow。
4.处理主窗口消息
窗口过程函数 MainWndProc:接收和处理消息。
5.3 Windows 事件和消息概述
5.3.1 消息和消息处理(P91)
消息类型:
标准 Windows 消息:由窗口和视图处理。
有鼠标消息、WM_PAINT消息……。
控件通知:从控件传送给WM_COMMAND通知消息。
命令消息:用户界面对象
(如菜单项、工具栏按钮和快捷键等)的WM_COMMAND通知消息。
5.3.2 窗口过程
窗口过程(函数):处理 WM_PAINT和WM_DESTROY。
5.4 Simpwin 程序的工作过程
5.4.1 WinMain( )函数(P92)
注册窗口类、创建和显示窗口、初始化应用程序、
进入消息循环,检取到WM_QUIT时,退出循环。
命令行方式:CmdLine
视窗显示方式:CmdShow
5.4.2 定义和注册窗口类(P93)
窗口属性
如标题栏文字、窗口大小和位置、图标、背景颜色等。
定义窗口类:把属性填入WNDCLASS或WNDCLASSEX结构的相应成员。
5.5 基本的数据类型
第6章 使用基本资源
6.1 图标
6.2 菜单
6.2.1 创建菜单(P106)
* 资源定义文件 Menu.rc
MENUAPPMENU MENU DISCARDABLE
BEGIN
MENUITEM "退出(&X)", IDM_EXIT
POPUP "编辑(&E)" //弹出式菜单
BEGIN
MENUITEM "撤消(&U)\tCtrl+Z", IDM_EDITUNDO,GRAYED
// MENUITEM 菜单项,
// &符号后的字符为助记符,通过键盘 Alt+U访问菜单。
// IDM 菜单标识符的值
//在 Menu.h 或resource.h头文件中定义。
END
END
6.2.2 处理菜单消息(P108)
* 定义菜单项动作,选中菜单项执行相应命令。
在窗口过程的 WM_COMMAND 消息处理代码中实现。
例如:Menu.c
case WM_COMMAND: // Windows Menu
switch(LOWORD(wParam)) //wParam参数的低位字
{
...
// 菜单选项,判定wParam参数的低位字为 IDM_EXIT 时,
// 调用函数 PostQuitMessage(0) 响应退出应用程序。
case IDM EXIT:
PostQuitMessage(0);
break;
default;
return(DefWindowProc(hWnd,message,wParam,lParam));
}
6.3 快捷键
6.3.4 示范程序(P114)
* 头文件 Menu.h
// 菜单命令
// [编辑]菜单
# define IDM_EDITUNDO 210
# define IDM_EDITCUT 211
# define IDM_EDITCOPY 212
# define IDM_EDITPASTE 213
# define IDM_EDITDELETE 214
# define IDM_EDITSELECTALL 215
* 资源文件 Menu.rc
POPUP "编辑(&E)"
BEGIN
MENUITEM"撤消(&U)\tCtrl+Z", IDM_EDITUNDO,GRAYED
MENUITEM SEPARATOR // 菜单分隔线
MENUITEM"(剪切&T)\tCtrl+X", IDM_EDITCUT
MENUITEM"(复制&C)\tCtrl+C", IDM_EDITCOPY
MENUITEM"(粘贴&P)\tCtrl+V", IDM_EDITPASTE
MENUITEM"(删除&D)\tDel", IDM_EDITDELETE
MENUITEM SEPARATOR // 菜单分隔线
MENUITEM"(全选&A)\tCtrl+A", IDM_EDITSELECTALL
END
* 程序文件 Menu.c
// 窗口过程
LRESULT APIENTRY MainWndProc(
HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam)
{
....
// 消息处理
case WM_COMMAND:
idCommand = LOWORD(wParam);
switch( idcommand)
{
case IDM_EDITUNDO;
EnableMenuItem(GetMenu(hWnd),
IDMEDITUNDO,MF_BYCOMMAND | MF_GRAYED);
break;
}
}
6.4 对话框
第8章 绘图工具和图形设备接口
图形设备接口:GDI
8.1 设备描述表(P174)
1.应用程序—设备描述表句柄HDC—设备描述表DC(Device Context)。
调用获取设备描述表GetDC( ),画图准备BeginPaint( )—
检取显示设备描述表句柄—图形设备接口(GDI)画图—
释放设备描述表 ReleaseDC( ),结束画图EndPaint( )。
2.获取设备描述表
HDC GetDC(HWND hWnd);
* 设备描述表句柄HDC(Handle Device Context):
获取或释放显示器设备描述表。
* 窗口句柄hWnd(handle Windwos):
窗口建立后,系统反馈的信息。
利用窗口句柄对窗口进行初始化、注册、创建、显示和销毁。
3.SelectObject函数(P176)
把位图、画笔和画刷等对象选入指定的设备描述表中。
原型:HGDIOBJ SelectObject(HDC hdc,HGDIOBJ hgdiobj);
4.DeleteObjec( )函数
删除逻辑画笔、画刷、字体、位图、区域或调色板对象,
释放相关系统资源。
8.2 画点(P177)
COLORREF:RGB颜色值。
COLORREF SetPixel(HDC hdc,int x,int y,COLORREF crColor);
例如:
hdc = GetDC(hWnd);
SetPixel(hdc,400,300,RGB(255,0,0);
ReleaseDC(hWnd,hdc);
* 点集(P180)
PixelSet.h
int DrawMyRect(HDC,int,int,int,int); //画矩形
PixelSet.c
int DrawMyRect(HDC hdc,int x0,int y0,int x1,int y1);
{
MoveToEx(hdc,x0,y0,NULL);
LineTo(hdc,x1,y0);
LineTo(hdc,x1,y1);
LineTo(hdc,x0,y1);
LineTo(hdc,x0,y0);
return 1;
}
x0,y0 ——→x1,y0 ↑ | | | | ↓ x0,y1←—— x1,y1 |
8.3 画直线(P187)
MoveToEx( )原型:
BOOL MoveToEx(HDC hdc,int X,int Y,LPPOINT lpPoint);
LineTo( )原型:
BOOL LineTo(HDC hdc,int nXEnd,int nYEnd);
例如:MoveToEx(hdc,x0,y0,NULL);
LineTo(hdc,x1,y1);
o————————————→o
8.4 画折线和曲线
8.4.2 画弧线(P193)
* Arc( ) 函数原型
BOOL Arc (HDC hdc,
int Xleft, int Ytop, int Xright, int Ybottom,
int Xstart, int Ystart, int Xend, int Yend);
圆弧外接矩形的左上角和右下角的坐标,
逆时针方向的圆弧起始点和终点坐标。
8.5 画笔
8.5.1 画笔的属性(P200)
风格:实线 PS_SOLID、划线 PS_DASH、点划线 PS_DASHDOT。
8.6 画封闭曲线(P207)
* 矩形函数原开型:
BOOL Rectangle
(HDC hdc,int nLeft,int nTop,int nRignt,int Bottom);
矩形的左上和右下角坐标。
例如:Rectangle(hdc,10,10,790,590);
* 椭圆形函数原开型:
BOOL Ellipse
(HDC hdc,int nLeft,int nTop,int nRignt,int Bottom);
椭圆外接矩形的左上和右下角坐标。
例如:Ellipse(hdc,10,10,790,590);
8.7 字体选择和文字输出
8.7.1 逻辑字体(P218)
* 逻辑字体 LOGFONT 结构描述
typedef struct tagLOGFONT {
LONG lfHeight;
.............
} LOGFONT;
8.7.4 文字输出(P221)
1. 简单的文字输出 TextOut( )
例如:TextOut(hdc,30,60,"矩形",4 );
x,y坐标
2. 支持矩形剪裁、字符间距和背景颜色的文字输出。
BOOL ExtTextOut(
HDC hdc,
int x,
int y,
UINT fuOptions, //文字输出选项
CONST RECT *lprc, //外接矩形
LPCTSTR lpString, //字符串指针
UINT cbCount, //字符数目
CONST INT * lpDx //字符间距值数组的指针
};
8.7.5 文字格式化(222)
* 设置设备描述表的文字格式化属性
1.设置对齐方式:SetTextAlign( );
UINT SetTextAlign(
HDC hdc
UINT fMode
//文字对齐方式,如 TA_CENTER 水平居中
);
2.设置文字前景色:SetTextColor( );(P231)
SetTextColor(hDC,RGB(255,0,0));
3.设置文字背景色:SetBKColor( );默认白色
SetBKColor(hDC,RGB(0,255,0));
4.设置背景颜色方式:SetBKMode( );默认不透明
Windows C 图形程序设计 WCTCS.EXE
实例:顺序演示图形(用点、线、矩形、圆形、圆弧函数画图)
1.矩形圆形,矩形内白色(用矩形圆形函数画图)
1.1 水平青色填充(用点函数画连续的彩色点)
2.紫绿青色边框(用点函数画连续的彩色点)
3.圆形圆弧(用圆形圆弧函数画图)
3.1 垂直黄色填充
4.正弦波(用椭圆弧函数画图)
4.1 水平青色填充
5.水平线和直方图(用点函数画连续的彩色点)
5.1 垂直青色填充
6.五角星(用直线函数画线)
图形程序设计
计算机专业教材
根据教材制作讲稿
2000.9.
第一节 图形模式的设置
* 图形初始化函数(P168)
设置图形模式的函数:把屏幕显示80列25行的字符模式设置成
640点480行图形模式(VGA)。
0,0 |
|
x=639 |
|
x,y |
|
y=479 |
|
|
格式:initgraph(&graphdriver,&graphmode,&pathtodriver);
1.图形驱动器代码(graphdriver):
符号常量 |
代码 |
意义 |
DETECT |
0 |
自动检测显示卡类型 |
VGA |
9 |
VGA显示器 图形驱动程序 EGAVGA.BGI |
2.初始图形模式代码(graphmode)
例如:graphdriver=DETECT //自动检测显示卡类型
3.图形驱动程序搜索路径(pathtodriver)
为空" "时,图形驱动程序必须在当前目录。
4.颜色代码值(P171)
代码 |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
颜色 |
黑 |
蓝 |
绿 |
青 |
红 |
粉红 |
棕 |
灰 |
浅灰 |
代码 |
|
9 |
10 |
11 |
12 |
13 |
14 |
15 |
|
颜色 |
|
浅蓝 |
浅绿 |
浅青 |
浅红 |
浅粉红 |
黄 |
白 |
|
第二节 基本图形对象
一、点
* 用类描述点特征,具体的点是这个类的对象。
point.h
上机内容:彩色正弦波 CSZXB.CPP(P172)
for(i=0;i<=2PI;i+=PI/99999)
x=640/6.28*i;
y=240-(100+100/6.28*i)sin(i);
c=15/6.28*i+1
C++语言 图形程序设计 彩色正弦波演示 七彩、黑色、红色、绿色、蓝色正弦波 佛山职业技术学院 计算机及应用 984 2000.11.20. 按任意键继续! |
|
C++图形程序设计
1.把图形驱动程序、英文字库复制到当前目录。
E:\CPP>COPY C:\BC30\BGI\EGAVGA.BGI 图形显示接口
E:\CPP>COPY C:\BC30\BGI\*.CHR 英文字库
2. 把VGA图形显示接口EGAVGA.BGI加到GRAPHICS.LIB图形库中。
C:\BC30\BGI>BGIOBJ EGAVGA
C:\BC30\LIB>TLIB GRPHICS.LIB+EGAVGA
3. 环境设置
Option/Linker/Libraties/Libraties: Graphics Library 打开图形库
/Directories/Include Directories: C:\BC30\Include 包含文件的路径
/Library Directories: C:\BC30\Lib 库函数的路径
/Output Directories: E:\CPP 输出文件.EXE的路径
/Source Directories: E:\CPP 源文件.CPP的路径
4.彩色正弦波群 CSZXBQ.CPP
(1)循环变化线宽、颜色、位置、幅值、波峰数、背景、速度和方向
(2)循环变化方向
case 0 I=0~n*pi //向下或向右
case 1 I=n*pi~0 //向上或向左
case 0 x=640/(n*pi)*i //水平向左或向右
y=yh-25*sin(I)
case 1 y=480/(n*pi)*i //垂直向上或向下
x=xa-25*sin(I)
Point.h | Point.h | Point.h | Point.h | Point.h | Point.h | Point.h | 公式 |
p | 0 | 1 | 2 | 3 | 4 | 5 | |
坐标X | X±0 | X±1 | X±2 | X±3 | X±4 | X±5 | 逐一加 |
坐标Y | Y±0 | Y±1 | Y±2 | Y±3 | Y±4 | Y±5 | 逐一加 |
线宽W | 1 | 3 | 5 | 7 | 9 | 11 | W=1+2*p |
颜色C | 14 | 13 | 12 | 11 | 10 | 9 | C=14-p |
位置Yh |
120 |
180 |
240 |
300 |
360 |
420 |
(2+P)*480/8 |
幅值A | 12 | 15 | 18 | 21 | 24 | 27 | A=a+3 |
波峰数M | 1 | 2 | 3 | 4 | 5 | 6 | M=p+1 |
半波数n | 1 | 3 | 5 | 7 | 9 | 11 | N=n+2 |
背景Bk | 1 | 2 | 3 | 4 | 5 | 6 | Bk=p+1 |
速度V | 1 | 9 | 25 | 49 | 81 | 121 | V=n*n |
X-5 X-4 X-3 X-2 X-1 |
Y-5 Y-4 Y-3 Y-2 Y-1 X+0 X+1 X+2 X+3 X+4 X+5 |
|
Y+0 Y+1 Y+2 Y+3 Y+4 Y+5 |
图形程序设计
计算机专业教材
根据教材制作讲稿
1999.2.
* Turbo C 图形语句或图形函数丰富。
3.1.3 图形系统初始化和模式控制
1.图形系统初始化和关闭
例3.3
# include"graphics.h"
main()
{
int gdriver = DETECT,gmode;
/* 自动搜寻显示器类型和显示模式 */
initgraph(&gdrever,&gmode," ");
/* 初始化:启动图形系统,进入绘图状态,屏幕显示"."光标;*/
/* 如TVGA 1024*768点 */
bar3d(10,20,50,80,0,0);
getch();
/* 按键继续 */
closegraph();
/* 关闭图形系统,释放图形系统驱动程序占用的内存空间;*/
/* 返回文本模式,屏幕显示"_"光标,如VGA 80列25行 */
}
3.1.4 图形坐标的设置
1.定点
把当前光标移到所需的位置
void far moveto (int x,int y);
以增量方式移动当前光标
void far moverel(int deltax,int deltay); /* △x,△y */
3.1.5 屏幕窗口操作
1.图形屏幕处理
清除图形屏幕
void far cleardevice(void);
2.屏幕窗口操作
ckcz_dm ckcz.exe
清除当前图形窗口
void far clearviewport(void);
设置图形窗口
void far setviewport
(int left,int top,int right,int bottom,int clipflag);
/* clipflag:用值(1,0)设置超出窗口是否剪裁 */
3.2 图形颜色设置
* 前景色:图形点的颜色。
* 背景色:整个屏幕显示的颜色。
3.2.1 颜色的设置
1.设置当前背景颜色
void far setbkcolor(int color);
2.设置当前画图颜色
void far setcolor(int color);
3.3 线的特性设定和填充
3.3.1 线的特性设定 线型线宽
void far setlinestyle
(int linestyle,unsigned pattem,int width);
linestyle线型:实线 0,中心线 2。
unsigned pattem无符号整型数:
用户自定义线型 1,系统定义 0。
width线宽:1,3个像素。
3.3.2 填充模式和颜色设置 HLLSTC
viod far setfillstyle(int pattem,in color);
3.4 图形模式下文本处理
3.4.1 文本输出函数
1.把一字符串输出到屏幕当前位置
void far outtext(char * textstring);
2.在屏幕指定位置输出一字符串
void far outtextxy(int x,int y,char textstring);
3.4.2 输出文本的设置
1.设置输出文本字体、方向与字符大小
void far settextstyle
(int font,int direction,int charsize)
2.设置文本对齐方式
void far settextjustify(int horiz,int vert);
void far settextjustify(1,1); /* 水平垂直居中 */
3.6 常用画图函数简介
JTG图形移动 TXYD 电波发射 DBFS 红花绿叶生长 HHLYSZ
直线:
void far line(int x1,int y1,int x2,int y2);
矩形:
void far rectangle(int left,int top,int right,int bottom);
void far bar(int left,int top,int right,int bottom);
圆形:
void far circle(int x,int y,int radius);
椭圆:
void far ellipse
(int x,int y,int start,int end,int xradius,int yradius,);
圆心(x,y),起始角,终止角,x轴y轴半径。