zoukankan      html  css  js  c++  java
  • 08 Windows编程——画图

    源码

      1 #include<Windows.h>
      2 #include<tchar.h>
      3 #include<stdio.h>
      4 #define NUM 1000
      5 
      6 LRESULT CALLBACK WindProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);
      7 
      8 int WinMain(HINSTANCE hInst, HINSTANCE tmp, LPSTR szCmd, int nShow)
      9 {
     10     WNDCLASS WndClass;
     11     TCHAR* ClassName = TEXT("MyClass");
     12     HWND hwnd;
     13     MSG msg;
     14     HBRUSH hBrush;
     15 
     16     hBrush = CreateSolidBrush(RGB(0x20, 0x85, 0x41));
     17     WndClass.cbClsExtra = 0;
     18     WndClass.cbWndExtra = 0;
     19     WndClass.hbrBackground = hBrush;
     20     WndClass.hCursor = LoadCursor(NULL, IDC_ARROW);
     21     WndClass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
     22     WndClass.hInstance = hInst;
     23     WndClass.lpfnWndProc = WindProc;
     24     WndClass.lpszClassName = ClassName;
     25     WndClass.lpszMenuName = NULL;
     26     WndClass.style = CS_VREDRAW | CS_HREDRAW;
     27 
     28     if (!RegisterClass(&WndClass))
     29     {
     30         MessageBox(NULL, TEXT("Gegister Class Fail!!"), TEXT("error"), MB_OK);
     31         return 0;
     32     }
     33 
     34     //WS_VSCROLL窗口滚动条
     35     hwnd = CreateWindow(ClassName, TEXT("Hello"), WS_OVERLAPPEDWINDOW | WS_VSCROLL, 0, 0, 1000, 800, NULL, NULL, hInst, NULL);
     36     if (hwnd == NULL)
     37     {
     38         MessageBox(NULL, TEXT("Create Window Fail!!"), TEXT("error"), MB_OK);
     39         return 0;
     40     }
     41     ShowWindow(hwnd, nShow);
     42     UpdateWindow(hwnd);
     43 
     44     while (GetMessage(&msg, NULL, 0, 0))
     45     {
     46         TranslateMessage(&msg);
     47         DispatchMessage(&msg);
     48     }
     49 
     50     return 0;
     51 }
     52 
     53 LRESULT CALLBACK WindProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
     54 {
     55     HDC hdc;
     56     static HPEN hPen1,hPen2;
     57     static HBRUSH hBrush;
     58     PAINTSTRUCT pt;
     59     TEXTMETRIC ts;
     60     TCHAR buf[1024];
     61     int i;                //行数
     62     static int cyChar;    //字体大小
     63     static int cy;        //客户区高度
     64     static SCROLLINFO si;
     65     static int position = 0;
     66     switch (message)
     67     {
     68     case WM_CREATE:
     69         hdc = GetDC(hwnd);
     70         hBrush = CreateSolidBrush(RGB(249, 98, 241));
     71         hPen1 = CreatePen(PS_SOLID,100, RGB(0, 0, 255));
     72         GetTextMetrics(hdc, &ts);
     73         ReleaseDC(hwnd, hdc);
     74         cyChar = ts.tmHeight;
     75         si.cbSize = sizeof(si);
     76         return 0;
     77     case WM_SIZE:
     78         //窗口高度
     79         cy = HIWORD(lParam);
     80         si.fMask = SIF_ALL;
     81         si.nMax = NUM - 1;
     82         si.nMin = 0;
     83         si.nPage = cy / cyChar;
     84         si.nPos = position;
     85         si.nTrackPos = 0;
     86         SetScrollInfo(hwnd, SB_VERT, &si, TRUE);
     87     case WM_VSCROLL:
     88         //当滚动条是窗口的一部分时,可以忽略IParam参数
     89         switch (LOWORD(wParam))
     90         {
     91         case SB_BOTTOM:
     92             si.nPos = si.nMax;
     93             break;
     94         case SB_LINEDOWN:
     95             si.nPos++;
     96             break;
     97         case SB_LINEUP:
     98             si.nPos--;
     99             break;
    100         case SB_PAGEDOWN:
    101             si.nPos = si.nPos + cy / cyChar;
    102             break;
    103         case SB_PAGEUP:
    104             si.nPos = si.nPos - cy / cyChar;
    105             break;
    106         case SB_THUMBPOSITION:
    107             si.nPos = HIWORD(wParam);
    108             break;
    109         default:
    110             break;
    111         }
    112         si.fMask = SIF_POS;
    113         SetScrollInfo(hwnd, SB_VERT, &si, TRUE);
    114         GetScrollBarInfo(hwnd, SB_VERT, &si);
    115         position = si.nPos;
    116         //UpdateWindow(hwnd);//窗口必须有无效区,否则刷新也是白刷。替换为InvalidateRect强制刷新
    117         //InvalidateRect函数会产生WM_PAINT消息
    118         InvalidateRect(hwnd, NULL, FALSE);
    119         return 0;
    120     case WM_PAINT:
    121         GetScrollBarInfo(hwnd, SB_VERT, &si);
    122         //调用BeginPaint后整个客户去都是有效的。ValidateRect使客户区中任意矩形区域变成有效的
    123         hdc = BeginPaint(hwnd, &pt);
    124         hPen2=(HPEN)SelectObject(hdc, hPen1);
    125         SelectObject(hdc, hBrush);
    126         MoveToEx(hdc, 500, 100, NULL);
    127         LineTo(hdc, 100, 100);
    128         Rectangle(hdc, 500, 50, 200, 200);
    129         SelectObject(hdc, hPen2);
    130 
    131         for (i = 0; i < NUM; i++)
    132         {
    133             _stprintf(buf, TEXT("---------------%d--------------"), si.nPos + i);
    134             TextOut(hdc, 0, i * cyChar, buf, _tcslen(buf));
    135         }
    136         EndPaint(hwnd, &pt);
    137         return 0;
    138     case WM_DESTROY:
    139         PostQuitMessage(0);//发送WM_QUIT消息
    140         return 0;
    141     default:
    142         break;
    143     }
    144 
    145     return DefWindowProc(hwnd, message, wParam, lParam);
    146 }
    View Code

     创建画刷

    HBRUSH CreateSolidBrush(
      COLORREF color
    );

    初始化一个指定颜色的画刷。画笔可以随后被选为任何设备上下文的当前刷子。

    SelectObject 

    HGDIOBJ SelectObject(
      HDC     hdc,
      HGDIOBJ h
    );

    把一个对象(位图、画笔、画刷等)选入指定的设备描述表。新的对象代替同一类型的老对象。

    hdc :设备描述表句柄(要载入的设备描述表句柄)

    h: 选择要载入的对象的句柄

    但该对象的句柄必须使用以下函数创建才有效:

    Bitmap(位图)          CreateBitmap, CreateBitmapIndirect, 
                                   CreateCompatibleBitmap, CreateDIBitmap, 
                                   CreateDIBSection 
    Brush(画刷)            CreateBrushIndirect, eateDIBPatternBrush,  
                                   CreateDIBPatternBrushPt, CreateHatchBrush,  
                                   CreatePatternBrush, CreateSolidBrush 
    Font(字体)              CreateFont, CreateFontIndirect


    Pen(画笔)               CreatePen, CreatePenIndirect


    Region(区域)          CombineRgn, CreateEllipticRgn,  
                                   CreateEllipticRgnIndirect,  
                                   CreatePolygonRgn, CreateRectRgn,  
                                   CreateRectRgnIndirect 

    返回值:如果选择对象不是区域并且函数执行成功,那么返回值是被取代的对象的句柄;如果选择对象是区域并且函数执行成功,返回如下一值;
    设置当前的背景色
    COLORREF SetBkColor(
      HDC      hdc,
      COLORREF color
    );

    用指定的颜色值来设置当前的背景色,如果指定的颜色值超出了当前设备的表示范围,则设置为最近似的、设备可以表示的颜色。

    hdc:设置上下文句柄
    color:标识新的背景颜色值。如果想要获得COLORREF的值,请使用RGB宏。
    MoveToEx 
    BOOL MoveToEx(
      HDC     hdc,
      int     x,
      int     y,
      LPPOINT lppt
    );

    将当前绘图位置移动到某个具体的点,同时也可获得之前位置的坐标。

    hdc:  传入参数,设备上下文句柄。
    x:      传入参数:新位置的X坐标。
    y:   传入参数:新位置的Y坐标。
     lppt:   传出参数:一个指向POINT结构的指针,用来存放上一个点的位置,若此参数为NULL,则不保存上一个点的位置
    返回值:  返回TRUE代表移动成功,FALSE代表失败
    LineTo 
    BOOL LineTo(
      HDC hdc,
      int x,
      int y
    );

    用当前画笔画一条线,从当前位置连到一个指定的点。这个函数调用完毕,当前位置变成x,y。

    hdc:  设备句柄
    x:   线段终点X坐标位置,采用逻辑坐标表示。这个点不会实际画出来;它不属于线段的一部份
    y:   线段终点Y坐标位置,采用逻辑坐标表示。这个点不会实际画出来;它不属于线段的一部份
    返回值:返回TRUE代表移动成功,FALSE代表失败
  • 相关阅读:
    js 基于函数伪造的方式实现继承
    js 创建List<Map> 这种格式的集合
    微信get post请求到微信服务器 模版 素材操作
    微信开发学习 问题1: 网页授权问题 “该连接无法访问” 解决方法
    Jackson 高性能的JSON处理 ObjectMapper
    baseDao 使用spring3+hibernate4方式
    PropertiesUtil 读取配置文件工具类
    C语言(函数)学习之strstr strcasestr
    命令行选项解析函数(C语言):getopt()和getopt_long()
    AE插件开发的一些总结
  • 原文地址:https://www.cnblogs.com/kelamoyujuzhen/p/9315159.html
Copyright © 2011-2022 走看看