鱼C论坛

 找回密码
 立即注册
查看: 2094|回复: 0

[技术交流] API编程初学者之绘制图形基本操作

[复制链接]
发表于 2015-1-27 01:04:35 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 shaoguanfa 于 2015-1-27 01:08 编辑
  1. #include <windows.h>
  2. #include <stdio.h>
  3. LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
  4. //-------------------以下初始化窗口类---------------------------------------------
  5. int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPreInst, LPSTR lpszCmdLine, int nCmdShow)
  6. {
  7.         HWND hwnd;
  8.         MSG Msg;
  9.         WNDCLASS wndclass;                                                    //定义窗口类
  10.         char lpszClassName[] = "哈哈,for your smile!";                 //窗口类名
  11.         char lpszTitle[] = "MZone---我的地盘我作主!";              //窗口标题名
  12.                                                                                                                 //初始化窗口类
  13.         wndclass.style = 0;                                                               //窗口类型为默认类型
  14.         wndclass.lpfnWndProc = WndProc;                                     //窗口处理函数为WndProc
  15.         wndclass.cbClsExtra = 0;                                                      //窗口类无扩展
  16.         wndclass.cbWndExtra = 0;                                                   //窗口实例无扩展
  17.         wndclass.hInstance = hInstance;                                            //当前实例句柄
  18.         wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);   //窗口的最小化图标为默认图标
  19.         wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);     //窗口采用箭头光标
  20.         wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);   //窗口背景为白色
  21.         wndclass.lpszMenuName = NULL;                                      //窗口中无菜单
  22.         wndclass.lpszClassName = lpszClassName;                         //窗口的类名
  23.                                                                                                                                         //---------------以下进行窗口类的注册---------------------------------------------------
  24.         if (!RegisterClass(&wndclass))
  25.         {
  26.                 MessageBeep(0);                                                              //如果注册失败则发出警告声音
  27.                 return false;
  28.         }
  29.         //创建窗口
  30.         hwnd = CreateWindow(
  31.                 lpszClassName,                                                               //窗口类名
  32.                 lpszTitle,                                                                          //窗口实例的标题名
  33.                 WS_OVERLAPPEDWINDOW,                                    //窗口的风格
  34.                 CW_USEDEFAULT,                                                     //窗口左上角坐标为默认
  35.                 CW_USEDEFAULT,                                                     //窗口右上角坐标为默认
  36.                 CW_USEDEFAULT,                                                     //窗口宽度为默认
  37.                 CW_USEDEFAULT,                                                     //窗口高度为默认
  38.                 NULL,                                                                           //此窗口无父窗口
  39.                 NULL,                                                                           //此窗口无主菜单
  40.                 hInstance,                                                                       //创建此窗口应用程序的当前句柄
  41.                 NULL                                                                            //不使用一个传递给窗口的参数值的指针
  42.                 );
  43.         ShowWindow(hwnd, nCmdShow);                                 //显示窗口
  44.         UpdateWindow(hwnd);                                                 //绘制用户区
  45.         while (GetMessage(&Msg, NULL, 0, 0))                         //消息循环
  46.         {
  47.                 TranslateMessage(&Msg);                                            //将消息的虚拟键转换为字符信息
  48.                 DispatchMessage(&Msg);                                            //将信息传送到指定窗口函数
  49.         }
  50.         return Msg.wParam;                                                     //程序终止时将信息返回系统
  51. }
  52. //窗口函数(回调函数)
  53. LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
  54. {
  55.         HDC hdc;
  56.         PAINTSTRUCT ps;
  57.         int i,x,y;
  58.         COLORREF cr;
  59.         POINT pn[5];
  60.         RECT r = { 50,100,100,200 };//创建矩形区域并初始化
  61.         switch (message)
  62.         {
  63.         case WM_LBUTTONDOWN:
  64.                 hdc = GetDC(hwnd);
  65.                 cr = GetPixel(hdc, LOWORD(lParam), HIWORD(lParam));
  66.                 for (i = 0; i < 50; i++)
  67.                 {
  68.                         SetPixel(hdc, 80 + i, 80 + i, cr);
  69.                 }
  70.                 ReleaseDC(hwnd, hdc);
  71.                 break;
  72.         case WM_PAINT:
  73.                 hdc = BeginPaint(hwnd, &ps);
  74.                 for ( i = 0; i < 100; i++)
  75.                 {
  76.                         SetPixel(hdc, 50 + i, 50 + i, RGB(222, 0, 0));
  77.                 }
  78.                 MoveToEx(hdc, 44, 44, NULL);
  79.                 LineTo(hdc, 222, 22);//画直线
  80.                 pn[0].x = 5;
  81.                 pn[0].y = 5;
  82.                 pn[1].x = 22;
  83.                 pn[1].y = 22;
  84.                 pn[2].x = 11;
  85.                 pn[2].y = 22;
  86.                 pn[3].x = 33;
  87.                 pn[3].y = 33;
  88.                 pn[4].x = 44;
  89.                 pn[4].y = 444;
  90.                 Polyline(hdc, pn, 5);//画多边线
  91.                
  92.                 SelectObject(hdc, CreatePen(PS_DASH, 5, RGB(222, 111, 22)));//创建画笔对象
  93.                 //设置边框颜色,(画笔类型(solid实线,dot点线,dash,虚线),画笔宽度,画笔颜色)
  94.                 Arc(hdc, 10, 100, 80, 200, 70, 120, 70, 120);//逆时针画弧
  95.                
  96.                 SelectObject(hdc, GetStockObject(BLACK_BRUSH));//取系统画刷填充下面的椭圆
  97.                 Ellipse(hdc, 200, 20, 250, 50);//画椭圆
  98.                
  99.                 SelectObject(hdc, CreateSolidBrush(RGB(222, 222, 22)));//创建画刷对象,//使用RGB颜色填充圆角矩形                                                                                                               
  100.                 RoundRect(hdc, 100, 200, 200, 350, 80, 110);//画圆角矩形
  101.                
  102.                 SelectObject(hdc, CreateHatchBrush(HS_CROSS, RGB(255, 255, 0)));//创建画刷对象,
  103.                 //具有特殊形状并且带有颜色的画刷,使用RGB颜色填充下面的矩形
  104.                 Rectangle(hdc, 222, 121, 122, 177);//画矩形

  105.                 FillRect(hdc, &r, CreateSolidBrush(RGB(255, 255, 0)));//在矩形(RECT r)区域填充颜色
  106.                
  107.                 FrameRect(hdc, &r, (HBRUSH)GetStockObject(BLACK_BRUSH));//填充(RECT r)区域边框
  108.                 //FrameRect(HDC,const RECT *lprc,HBRUSH hbr )需要的是HBRUSH类型,
  109.                 //GetStockObject返回的是HGDIOBJ类型

  110.                 InvertRect(hdc, &r);//翻转(RECT r)区域颜色,即把FillRect(RGB)FrameRect(BLACK_BRUSH)颜色翻转
  111.                
  112.                 EndPaint(hwnd, &ps);
  113.                 break;
  114.         case WM_DESTROY:
  115.                 PostQuitMessage(0);                                                         //向应用程序发出WM_QUIT消息,请求退出
  116.         default:
  117.                 return DefWindowProc(hwnd, message, wParam, lParam);   //DefWindowProc 系统默认处理过程,
  118.         }                                                                                       //以确保所有发送到该窗口的消息均被处理
  119.         return (0);
  120. }
复制代码


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-3-29 19:54

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表