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

三、用点、线、矩形、椭圆、椭圆弧函数绘制图形和窗口管理

xhy.gif (25822 字节) 

 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. 用点函数黄绿青色水平垂直扫描刷新全屏
  2. 绘制矩形和圆形
  3. 用点函数在矩形的白底上绘制红绿蓝边框线
  4. 绘制圆形和圆弧
  5. 用椭圆弧函数绘制正弦波
  6. 用点函数绘制水平线和直方图
  7. 用直线函数绘制五角星
  8. 绘制小窗口边框和扫描刷新小窗口
  9. 绘制右上窗口五角星和右下窗口水平线直方图
  10.输出左窗口文本

佛山 谢山水 2003.5.5.

 

Windows C 图形程序设计 窗口管理

1. 用点函数黄绿青色水平垂直扫描刷新全屏
2. 用点函数绘制紫绿青边框线
3. 用直线函数绘制五角星图形
4. 绘制圆形和圆弧
5. 用点函数绘制水平线和直方图
6. 保留紫绿青边框线扫描刷新窗口
7. 绘制小窗口边框和扫描刷新小窗口
8. 用直线函数绘制右上窗口五角星图形
9. 用点函数绘制右下窗口水平线和直方图
10. 输出左窗口文本

佛山 谢山水 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 

    窗口管理:CKGL.cpp CKGL.exe

    五角星:WJX.cpp WJX.exe

    矩形圆形:JXYX.cpp JXYX.exe

    圆形圆弧:YXYH.cpp YXYH.exe CKGLa.cpp CKGLa.exe

    正弦波:ZXB.cpp ZXB.exe