zoukankan      html  css  js  c++  java
  • windows编程练习(画笔画刷使用)

    #include <windows.h>
    BOOL InitWindowsClass(HINSTANCE hInstance);
    BOOL InitWindows(HINSTANCE hInstance, int nCmdShow);
    long WINAPI WndProc(HWND hwnd, UINT iMessage, UINT wParam, LONG lParam);
    int WINAPI WinMain(
    HINSTANCE hInstance,
    HINSTANCE hPrevInst,
    LPSTR lpszCmdLine,
    int nCmdShow
    )
    {
    MSG Msg;
    if (!InitWindowsClass(hInstance)) return FALSE;
    //创口类的定义
    if (!InitWindows(hInstance, nCmdShow)) return FALSE;

    while (GetMessage(&Msg, 0, 0, 0)) {
    TranslateMessage(&Msg);
    DispatchMessage(&Msg);
    }
    return Msg.wParam;
    }
    long WINAPI WndProc(HWND hwnd, UINT iMessage, UINT wParam, LONG lParam)
    {
    HDC hdc; //定义设备环境句柄
    HBRUSH hBrush; //定义画刷句柄
    HPEN hPen; //定义画笔句柄
    PAINTSTRUCT PtStr; //定义指向包含绘图信息的结构体变量
    POINT points[6] = {
    {100,212},{70,227},{70,250},{130,250},{130,227},{100,212}
    }; //初始点又来一次,为了图形闭合,为了放多边形的点
    //定义一个POINT数组,包含6个点
    switch (iMessage) //处理消息
    {
    case WM_PAINT: //处理绘图消息
    hdc = BeginPaint(hwnd, &PtStr);
    hPen = (HPEN)GetStockObject(NULL_PEN);
    //必须强制转换,否则不知道是画笔还是画刷
    SelectObject(hdc, hPen);//把画笔选入设备环境
    hBrush = (HBRUSH)GetStockObject(BLACK_BRUSH);
    //获取系统定义的画刷
    SelectObject(hdc, hBrush);//把画笔选入设备环境
    LineTo(hdc, 50, 50); //画线,又因为是空笔所以只是把初始点移动而已
    DeleteObject(hPen);
    hPen = CreatePen(PS_SOLID, 2, RGB(255, 0, 0));
    //创建画笔
    SelectObject(hdc, hPen);
    //选入设备环境

    LineTo(hdc, 150, 50);
    LineTo(hdc, 100, 137);
    LineTo(hdc, 50, 50);
    //画一个三角形

    Polyline(hdc, points, 6);
    //画五边形
    Arc(hdc, 63, 137, 138, 212, 100, 137, 100, 137);
    //画一个圆
    Pie(hdc, 213, 137, 288, 212, 240, 137, 260, 137);
    //画一个圆饼
    RoundRect(hdc, 213, 100, 287, 137, 20, 20);
    //画一个圆角长方形
    DeleteObject(hPen);
    //删除画笔
    DeleteObject(hBrush);
    //删除画刷
    EndPaint(hwnd, &PtStr);
    //结束绘图
    return 0;
    case WM_DESTROY: //结束应用程序
    PostQuitMessage(0);
    return 0;
    default: //其他消息处理程序
    return DefWindowProc(hwnd, iMessage, wParam, lParam);

    }
    }
    BOOL InitWindowsClass(HINSTANCE hInstance)
    {
    //定义窗口类
    WNDCLASS WndClass;
    WndClass.cbClsExtra = 0;
    WndClass.cbWndExtra = 0;
    WndClass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
    //不加强制转换,系统不知道获取的是笔还是画刷
    WndClass.hCursor = LoadCursor(NULL, IDC_ARROW);
    WndClass.hIcon = LoadIcon(NULL, "END");
    WndClass.hInstance = hInstance;
    WndClass.lpfnWndProc = WndProc;
    WndClass.lpszClassName = "WinFill";
    WndClass.style = CS_HREDRAW | CS_VREDRAW;
    WndClass.lpszMenuName = NULL;
    return RegisterClass(&WndClass);
    }
    BOOL InitWindows(HINSTANCE hInstance, int nCmdShow)
    {
    //创建窗口
    HWND hwnd;
    //指向窗口的句柄
    hwnd = CreateWindow(
    "WinFill",
    "填充示例程序",
    WS_OVERLAPPEDWINDOW,
    CW_USEDEFAULT,
    0,
    CW_USEDEFAULT,
    0,
    NULL,
    NULL,
    hInstance,
    NULL
    );
    if (!hwnd) //判断窗口创建成功与否
    return FALSE;
    ShowWindow(hwnd, nCmdShow); //显示窗口
    UpdateWindow(hwnd);
    return TRUE;
    }

     

  • 相关阅读:
    第1周学习进度
    四则运算题1
    性能监控系统 | 从0到1 搭建Web性能监控系统
    数据库 | Oracle数据库查表空间使用情况
    性能测试 | 系统运行缓慢,CPU 100%,Full GC次数过多问题排查
    Markdown | 语法
    性能测试 | 理解单线程的Redis为何那么快?
    性能测试 | 理解分布式、高并发、多线程
    性能测试 | 常见的性能测试指标
    mysql 中varchar(50)最多能存多少个汉字
  • 原文地址:https://www.cnblogs.com/nanfengnan/p/13710164.html
Copyright © 2011-2022 走看看