• 学习windows编程 day4 之 盯裆猫


    写着写着就困了....

    看这些测量数据就算了,是对各种函数的练习

    #include <windows.h>
    
    LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);
    
    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
    {
        //声明全局数据:类名
        static TCHAR szClassName[] = TEXT("MyWindows");
        HWND hwnd;
        MSG msg;
    
        //注册窗口类
        WNDCLASS wndclass;
    
        wndclass.hInstance = hInstance;
        wndclass.lpszClassName = szClassName;
        wndclass.cbClsExtra = 0;
        wndclass.cbWndExtra = 0;
        wndclass.lpfnWndProc = WndProc;
        wndclass.lpszMenuName = NULL;
        wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
        wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
        wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
        wndclass.style = CS_HREDRAW;
    
        if (!RegisterClass(&wndclass))
        {
            MessageBox(NULL, TEXT("this program must run in Windows NT!"), szClassName, MB_ICONERROR);
            return 0;
        }
    
        hwnd = CreateWindow(
            szClassName,
            TEXT("MyFirstPractice"),
            WS_OVERLAPPEDWINDOW,
            CW_USEDEFAULT,
            CW_USEDEFAULT,
            600,
            600,
            NULL,
            NULL,
            hInstance,
            NULL
            );
    
        ShowWindow(hwnd, nShowCmd);
        UpdateWindow(hwnd);
    
        while (GetMessage(&msg, NULL, 0, 0))
        {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
    
        return msg.wParam;
    }
    
    LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
        HDC hdc;
        PAINTSTRUCT ps;
        RECT rect;
        static int cxClient, cyClient;
        static HPEN hPen,hOldPen;
        static HBRUSH hBrush, hOldBrush;
    
        POINT apt[4];
        switch (message)
        {
        case WM_SIZE:
            cxClient = LOWORD(lParam);
            cyClient = HIWORD(lParam);
            break;
        case WM_PAINT:
            hdc = BeginPaint(hwnd, &ps);
            GetClientRect(hwnd, &rect);
    //1.先绘制两条虚线
            //设置画笔
            hPen = CreatePen(PS_DOT, 0.1, RGB(192,192,192));
            hOldPen=SelectObject(hdc, hPen);
            //开始绘制
            MoveToEx(hdc, cxClient / 2, 0, NULL);
            LineTo(hdc, cxClient / 2, cyClient);
    
            MoveToEx(hdc, 0, cyClient/2, NULL);
            LineTo(hdc, cxClient, cyClient/2);
            //还原画笔
            SelectObject(hdc, hOldPen);
    
    //2.绘制头部(直径240)蓝色
            hBrush = CreateSolidBrush(RGB(0, 159, 232));
            hOldBrush = SelectObject(hdc,hBrush);
            Ellipse(hdc, cxClient / 2 - 120, cyClient / 2 - 200, cxClient/2 + 120, cyClient/2 + 40);
            SelectObject(hdc, hOldBrush);
    
    //3.画脸(和头内切直径200)白色
            //hBrush = (HBRUSH)GetStockObject(WHITE_BRUSH);
            //默认是白色,已经替换回来了
            Ellipse(hdc, cxClient / 2 - 100, cyClient / 2 - 160, cxClient / 2 + 100, cyClient / 2 + 40);
    
    //4.画眼睛(长60,宽50)
            Ellipse(hdc, cxClient / 2 - 50, cyClient / 2 - 180, cxClient / 2, cyClient / 2 - 120);
            Ellipse(hdc, cxClient / 2 + 50, cyClient / 2 - 180, cxClient / 2, cyClient / 2 - 120);
    
    //5.画眼珠
            hBrush = (HBRUSH)GetStockObject(BLACK_BRUSH);
            hOldBrush = SelectObject(hdc, hBrush);
    
            Ellipse(hdc, cxClient / 2 - 20, cyClient / 2 - 160, cxClient / 2 - 5, cyClient / 2 - 140);
            Ellipse(hdc, cxClient / 2 + 20, cyClient / 2 - 160, cxClient / 2 + 5, cyClient / 2 - 140);
    
            SelectObject(hdc, hOldBrush);
    //6.加上眼白
            hOldBrush = SelectObject(hdc, GetStockObject(WHITE_BRUSH));
            Ellipse(hdc, cxClient / 2 - 15, cyClient / 2 - 155, cxClient / 2 - 10, cyClient / 2 - 145);
            Ellipse(hdc, cxClient / 2 + 15, cyClient / 2 - 155, cxClient / 2 + 10, cyClient / 2 - 145);
            
            SelectObject(hdc, hOldBrush);
    //7.加上鼻子
            hBrush = CreateSolidBrush(RGB(255, 0, 0));
            hOldBrush=SelectObject(hdc, hBrush);
            Ellipse(hdc, cxClient / 2 - 10, cyClient / 2 - 135, cxClient / 2 + 10, cyClient / 2 - 115);
            SelectObject(hdc, hOldBrush);
    
    //8.加上鼻子到嘴上的线
            MoveToEx(hdc, cxClient / 2, cyClient / 2 - 115,NULL);
            LineTo(hdc, cxClient / 2, cyClient/2 - 30);
    
    //9.画上嘴巴
            Arc(hdc, cxClient / 2 - 70, cyClient / 2 - 120, cxClient / 2 + 70, cyClient/2 - 30,
                cxClient / 2 - 60, cyClient / 2 - 50, cxClient / 2 + 60, cyClient / 2 - 50);
    
    //10.画上胡须
            //
            MoveToEx(hdc, cxClient / 2 - 70, cyClient / 2 - 115, NULL);
            LineTo(hdc, cxClient / 2 - 20, cyClient / 2 - 100);
            MoveToEx(hdc, cxClient / 2 - 80, cyClient / 2 - 85, NULL);
            LineTo(hdc, cxClient / 2 -20, cyClient / 2-85);
            MoveToEx(hdc, cxClient / 2 - 70, cyClient / 2 - 55, NULL);
            LineTo(hdc, cxClient / 2 - 20, cyClient / 2 - 70);
            //
            MoveToEx(hdc, cxClient / 2 + 70, cyClient / 2 - 115, NULL);
            LineTo(hdc, cxClient / 2 + 20, cyClient / 2 - 100);
            MoveToEx(hdc, cxClient / 2 + 80, cyClient / 2 - 85, NULL);
            LineTo(hdc, cxClient / 2 + 20, cyClient / 2 - 85);
            MoveToEx(hdc, cxClient / 2 + 70, cyClient / 2 - 55, NULL);
            LineTo(hdc, cxClient / 2 + 20, cyClient / 2 - 70);
    
    //11.画身体,矩形蓝色
            hBrush = CreateSolidBrush(RGB(0, 159, 232));
            hOldBrush = SelectObject(hdc, hBrush);
            Rectangle(hdc, cxClient / 2 - 90, cyClient / 2, cxClient / 2 + 90, cyClient / 2 + 150);
            SelectObject(hdc, hOldBrush);
    
    //12.画肚子
            Ellipse(hdc, cxClient / 2 - 70, cyClient / 2 - 20, cxClient / 2 + 70, cyClient / 2 + 120);
            //覆盖多余长度
            hPen = CreatePen(PS_SOLID, 2, RGB(255, 255, 255));
            hOldPen = SelectObject(hdc, hPen);
            Arc(hdc, cxClient / 2 - 70, cyClient / 2 - 20, cxClient / 2 + 70, cyClient / 2 + 120, cxClient / 2 + 70, cyClient / 2, cxClient / 2 - 70, cyClient / 2);
            SelectObject(hdc, hOldPen);
    //13.项圈
            hBrush = CreateSolidBrush(RGB(255, 0, 0));
            hOldBrush = SelectObject(hdc, hBrush);
            RoundRect(hdc, cxClient / 2 - 95, cyClient / 2 - 5, cxClient / 2 + 95, cyClient / 2 + 10, 20, 10);
            SelectObject(hdc, hOldBrush);
    //14.铃铛
            hBrush = CreateSolidBrush(RGB(255, 255, 0));
            hOldBrush = SelectObject(hdc, hBrush);
            Ellipse(hdc, cxClient / 2 - 15, cyClient / 2, cxClient / 2 + 15, cyClient / 2+30);
            
    //15.铃铛上的线
            RoundRect(hdc, cxClient / 2 - 15, cyClient / 2 + 10, cxClient / 2 + 15, cyClient / 2 + 15, 2, 2);
            SelectObject(hdc, hOldBrush);
    //16.铃铛孔和线
            hBrush = CreateSolidBrush(RGB(255, 0, 0));
            hOldBrush = SelectObject(hdc, hBrush);
            Ellipse(hdc, cxClient / 2 - 4, cyClient / 2 + 18, cxClient / 2 + 4, cyClient / 2 + 26);
            MoveToEx(hdc, cxClient / 2, cyClient / 2 + 26, NULL);
            LineTo(hdc, cxClient / 2, cyClient / 2 + 30);
            SelectObject(hdc, hOldBrush);
    //17.口袋
            Pie(hdc, cxClient / 2 - 50, cyClient / 2, cxClient / 2 + 50, cyClient / 2 + 100, cxClient / 2 - 50, cyClient / 2 + 50, cxClient / 2 + 50, cyClient / 2 + 50);
    
    //18.画腿(用扇形挡住)
            Pie(hdc, cxClient / 2 - 20, cyClient / 2 + 130, cxClient / 2 + 20, cyClient / 2 + 170, cxClient / 2 + 20, cyClient / 2 + 150, cxClient / 2 - 20, cyClient / 2 + 150);
            hPen = CreatePen(PS_SOLID, 2, RGB(255, 255, 255));
            hOldPen = SelectObject(hdc, hPen);
            MoveToEx(hdc, cxClient / 2 - 20, cyClient / 2 + 150, NULL);
            LineTo(hdc, cxClient / 2 + 20, cyClient / 2 + 150);
            SelectObject(hdc, hOldPen);
    
    //19.画脚
            Ellipse(hdc, cxClient / 2 - 110, cyClient / 2 + 130, cxClient / 2 - 10, cyClient / 2 + 170);
            Ellipse(hdc, cxClient / 2 + 110, cyClient / 2 + 130, cxClient / 2 + 10, cyClient / 2 + 170);
    
    //20两个手
            hBrush = CreateSolidBrush(RGB(0, 159, 232));
            hOldBrush = SelectObject(hdc, hBrush);
            apt[0].x = cxClient / 2 - 90;
            apt[0].y = cyClient / 2 + 10;
            apt[1].x = cxClient / 2 - 130;
            apt[1].y = cyClient / 2 + 50;
            apt[2].x = cxClient / 2 - 110;
            apt[2].y = cyClient / 2 + 70;
            apt[3].x = cxClient / 2 - 90;
            apt[3].y = cyClient / 2 + 60;
            Polygon(hdc, apt, 4);
            SelectObject(hdc, hOldBrush);
            Ellipse(hdc, cxClient / 2 - 150, cyClient / 2 + 46, cxClient / 2 - 110, cyClient / 2 + 86);
    
            hBrush = CreateSolidBrush(RGB(0, 159, 232));
            hOldBrush = SelectObject(hdc, hBrush);
            apt[0].x = cxClient / 2 + 90;
            apt[0].y = cyClient / 2 + 10;
            apt[1].x = cxClient / 2 + 130;
            apt[1].y = cyClient / 2 + 50;
            apt[2].x = cxClient / 2 + 110;
            apt[2].y = cyClient / 2 + 70;
            apt[3].x = cxClient / 2 + 90;
            apt[3].y = cyClient / 2 + 60;
            Polygon(hdc, apt, 4);
            SelectObject(hdc, hOldBrush);
            Ellipse(hdc, cxClient / 2 + 150, cyClient / 2 + 46, cxClient / 2 + 110, cyClient / 2 + 86);
    
            //画线覆盖多余线条
            hPen = CreatePen(PS_SOLID, 2, RGB(0,159,232));
            hOldPen = SelectObject(hdc, hPen);
    
            MoveToEx(hdc, cxClient / 2-90, cyClient / 2+10, NULL);
            LineTo(hdc, cxClient / 2 - 90, cyClient / 2 + 50);
    
            MoveToEx(hdc, cxClient / 2 + 90, cyClient / 2 + 10, NULL);
            LineTo(hdc, cxClient / 2 + 90, cyClient / 2 + 50);
    
            SelectObject(hdc, hOldPen);
    
    
            EndPaint(hwnd, &ps);
            break;
        case WM_DESTROY:
            //销毁创建的画笔对象
            DeleteObject(hPen);
            PostQuitMessage(0);
            return 0;
        }
    
    
        return DefWindowProc(hwnd, message, wParam, lParam);
    }
  • 相关阅读:
    bzoj 2730: [HNOI2012]矿场搭建
    bzoj 1179: [Apio2009]Atm
    strcpy,strlen, strcat, strcmp函数,strlen函数和sizeof的区别
    C语言printf的格式
    C语言中交换两个数值的方法
    C语言中 指针的基础知识总结, 指针数组的理解
    自定义方法实现strcpy,strlen, strcat, strcmp函数,了解及实现原理
    选择排序
    冒泡排序的优化
    storyBoard中取消键盘第一响应
  • 原文地址:https://www.cnblogs.com/ssyfj/p/8510985.html
Copyright © 2020-2023  润新知