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