Windows C
图形程序设计
目录
一、利用典型的"Hello World!"应用程序新建项目
二、修改"Hello World!"应用程序
三、用点、线、矩形、椭圆、椭圆弧函数绘制图形和窗口管理
四、修改资源文件 WCTCS.rc
五、修改资源头文件 resorce.h
六、 程序源代码 *.cpp、程序可执行文件 *.exe 和程序运行结果图形 *.gif 文件清单
正文
《Windows C 图形程序设计》用于开发 Windows 应用程序的图形。
一、利用典型的"Hello World!"应用程序新建项目
文件—新建—项目(Project)—Win32 应用—
项目名:如,WCTCS(Windows C 图形程序设计);
位置:如,F:/WCTCS;
创建新的工作台(Workspace);
平台(Platforms):Win32
Win32应用—选用典型的"Hello World!"应用程序。
二、修改"Hello World!"应用程序
新项目窗口—文件视图(File View)—展开 WCTCS File—双击 WCTCS.CPP。
1.增加绘图所需要包函的数学函数头文件。
#include <math.h>
2.注册窗口类,填写窗口属性 RegisterClass
设置工作区背景颜色(画刷)
+2 +1 +0 -1 -2 -3
黑 白 浅灰 灰 蓝 浅蓝
wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW-3);
3.创建窗口 CreateWindow
hWnd =
CreateWindow(
szWindowClass,
// 修改窗口标题栏
"Visual C++ 6.0 Windows C 图形程序设计
fsxss",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, 0,
CW_USEDEFAULT, 0,
NULL, NULL, hInstance, NULL);
4.窗口过程函数 WndProc,接收和处理消息
设置画笔
HDC hdc;
static int fnPenStyle=PS_SOLID; //画笔风格:实线
static int nPenWidth=2; //画笔宽度:
static COLORREF crPenColor=
RGB(255,255,0); //画笔颜色:
static COLORREF crBrushColor=0; //画刷颜色:
HPEN hPen;
5.修改标识符
光标资源、菜单控件IDC_WCTCS、图标资源IDI_WCTCS、字符串IDS_WCTCS
三、用点、线、矩形、椭圆、椭圆弧函数绘制图形和窗口管理
1.用点函数黄绿青色水平垂直扫描刷新全屏
水平垂直黄绿青色扫描刷新全屏
for(y=y0-300;y<y0+300;y++)
{
for(x=x0-400;x<x0+400;x++)
{
SetPixel(hdc,int(x),int(y),RGB(255,200,0));
}
}
1.1 输出窗口标题 DrawText“Visual
C++ 6.0 Windows C 图形程序设计 fsxss”
RECT rt;
GetClientRect(hWnd, &rt);
DrawText(hdc, szWCTCS, strlen(szWCTCS), &rt, DT_CENTER);
2. 绘制矩形和圆形
矩形紫色边框线
hPen=CreatePen(fnPenStyle,nPenWidth,crPenColor);
SelectObject(hdc,hPen);
Rectangle(hdc,int(x0-395),int(y0-245),int(x0+395),int(y0+245));
四边小圆框
for(x=x0-370;x<x0+360;x+=15)
{
y=y0-220;
Ellipse(hdc,int(x),int(y),int(x+20),int(y+20));
}
中心圆形
for(x=x0-300;x<x0+300;x+=200)
{
y=y0-100;
Ellipse(hdc,int(x),int(y),int(x+200),int(y+200));
}
2.1 绘制水平和垂直轴线
for(y=y0-220;y<y0+220;y+=0.01)
{
for(x=x0;x<x0+2;x++)
{
SetPixel(hdc,int(x),int(y),RGB(0,255,0));
}
}
2.2 水平青色扫描刷新窗口(保留部分小圆边框)
for(y=y0-214.0;y<y0+214.0;y++)
{
for(x=x0-362.0;x<x0+362.0;x++)
{
SetPixel(hdc,int(x),int(y),RGB(0,150,150));
}
}
3. 用点函数在矩形的白底上绘制红绿蓝边框线
for(x=x0-390.0;x<x0+390.0;x+=0.01)
{
for(y=y0-240.0;y<y0-238.0;y++)
{
SetPixel(hdc,int(x),int(y),RGB(255,0,0));
}
}
4. 绘制圆形和圆弧
椭圆形
Ellipse(hdc,int(x0-360),int(y0-210),int(x0+360),int(y0+210));
水平排放两圆
for(x=x0-325;x<x0+320.0;x+=328)
{
Ellipse(hdc,int(x),int(y0-162),int(x+324),int(y0+162));
}
圆弧曲线
hPen=CreatePen(fnPenStyle,nPenWidth,crPenColor);
SelectObject(hdc,hPen);
for(x=x0-323;x<x0+320.0;x+=329)
{
Arc(hdc,int(x),int(y0-ym),int(x+160.0),int(y0+ym),
int(x+160.0),int(y0),int(x),int(y0));
Arc(hdc,int(x+160.0),int(y0-ym),int(x+320.0),int(y0+ym),
int(x+160.0),int(y0),int(x+320.0),int(y0));
}
4.1 绘制水平和垂直轴线
4.2 垂直黄色扫描刷新窗口
5. 用椭圆弧函数绘制正弦波
hPen=CreatePen(fnPenStyle,nPenWidth,crPenColor);
SelectObject(hdc,hPen);
for(ym=90.0;ym<=180.0;ym+=30.0)
{
for(x=x0-314.0;x<x0+314.0;x+=314.0)
{
Arc(hdc,int(x),int(y0-ym),int(x+157.0),int(y0+ym),
int(x+157.0),int(y0),int(x),int(y0));
Arc(hdc,int(x+157),int(y0-ym),int(x+314.0),int(y0+ym),
int(x+157),int(y0),int(x+314.0),int(y0));
}
}
5.1 绘制水平和垂直轴线
5.2 水平青色扫描刷新大窗口(保留标题)
5.3 绘制紫绿青边框线
6. 用点函数绘制水平线和直方图
for(x=x0-314.0;x<x0+314.0;x+=0.1)
{
for(y=y0+100.0;y<y0+115.0;y++)
{
SetPixel(hdc,int(x),int(y),RGB(0,255,0));
}
}
for(y=y0+100;y>y0-118;y-=0.1)
{
for(x=x0-50;x<x0+50;x++)
{
SetPixel(hdc,int(x),int(y),RGB(255,255,0));
}
}
6.1 垂直黄色扫描刷新窗口
7. 用直线函数绘制五角星
MoveToEx(hdc,int(x0),int(y0-200),NULL); // 起点第1个角点
LineTo(hdc,int(x0+120),int(y0+160));
// 画至第3个角点
LineTo(hdc,int(x0-190),int(y0-60));
// 画至第5个角点
LineTo(hdc,int(x0+190),int(y0-60));
// 画至第2个角点
LineTo(hdc,int(x0-120),int(y0+160));
// 画至第4个角点
LineTo(hdc,int(x0),int(y0-200));
// 画至第1个角点
7.1 保留紫绿青边框,水平青色扫描刷新窗口
8. 绘制小窗口边框和扫描刷新小窗口
8.1 绘制左窗口边框和扫描刷新窗口
for(x=x01-184;x<x01+184;x+=0.01)
{
for(y=y0-220;y<y0-218;y++)
{
SetPixel(hdc,int(x),int(y),RGB(255,0,255));
}
}
for(y=y0-214;y<y0+214;y+=0.3)
{
for(x=x01-178;x<x01+178;x++)
{
SetPixel(hdc,int(x),int(y),RGB(0,180,180));
}
}
8.2 绘制右上窗口边框和扫描刷新窗口
for(x=x02-184;x<x02+184;x+=0.01)
{
for(y=y01-107;y<y01-105;y++)
{
SetPixel(hdc,int(x),int(y),RGB(0,255,0));
}
}
for(x=x02-178;x<x02+178;x+=0.2)
{
for(y=y01-101;y<y01+101;y++)
{
SetPixel(hdc,int(x),int(y),RGB(255,0,0));
}
}
8.3 绘制右下窗口边框和扫描刷新窗口
9. 绘制右上窗口五角星和右下窗口水平线直方图
9.1 用直线函数绘制右上窗口五角星图形
9.2 用点函数绘制右下窗口水平线和直方图
10.输出左窗口文本 DrawText
TextOut(hdc, 86,int(y0-180), "Windows C 图形程序设计 窗口管理",31);
TextOut(hdc, 50,int(y0-150), " 1. 用点函数黄绿青色水平垂直扫描刷新全屏",40);
TextOut(hdc, 50,int(y0-120), " 2. 用点函数绘制紫绿青边框线",28);
TextOut(hdc, 50,int(y0-90), " 3. 用直线函数绘制五角星图形",28);
TextOut(hdc, 50,int(y0-60), " 4. 绘制圆形和圆弧",18);
TextOut(hdc, 50,int(y0-30), " 5. 用点函数绘制水平线和直方图",30);
TextOut(hdc, 50,int(y0), " 6. 保留紫绿青边框线扫描刷新窗口",32);
TextOut(hdc, 50,int(y0+30), " 7. 绘制小窗口边框和扫描刷新小窗口",34);
TextOut(hdc, 50,int(y0+60), " 8. 用直线函数绘制右上窗口五角星图形",36);
TextOut(hdc, 50,int(y0+90), " 9. 用点函数绘制右下窗口水平线和直方图",38);
TextOut(hdc, 50,int(y0+120), "10. 输出左窗口文本",18);
TextOut(hdc,150,int(y0+150), "佛山 谢山水 2003.5.5.",21);
Windows C 图形程序设计
1. 用点函数黄绿青色水平垂直扫描刷新全屏 佛山 谢山水 2003.5.5. |
|
Windows C 图形程序设计 窗口管理 1. 用点函数黄绿青色水平垂直扫描刷新全屏 佛山 谢山水 2003.5.5. |
|
四、修改资源文件 WCTCS.rc
工作台—资源视图(Resources View)—WCTCS.rc的资源列表或资源文本。
1.对话框Dialog
标识符 ID:IDD_ABOUTBOX
Windows C 图形程序设计 WCTCS
佛山 谢山水 Copyright[C] 2003.5.5.
2.菜单 Menu
标识符 ID:IDC_WCTCS
文件管理—退出 Windows C 图形程序
3.字符串表 String Table
标识符 ID:IDS_WCTCS
工作区标题:Windows C 图形程序设计 WCTCS 佛山 谢山水 2003.5.5.
五、修改资源头文件 resorce.h 项目 WCTCS 头文件 WCTCS.h
工作台—文件视图(File View)—展开 WCTCS File—头文件—resorce.h—修改标识符 ID—
对话框 IDD_WCTCS_DIALOG
字符串 IDS_WCTCS
图标 IDI_WCTCS
光标资源 IDC_WCTCS
AFX_WCTCS
六、 程序源代码 *.cpp、程序可执行文件 *.exe 和程序运行结果图形 *.gif 文件清单
WCTCS.cpp WCTCS1.cpp WCTCS.exe WCTCS1.exe