五角星

2019-02-18  本文已影响0人  Pwnmelife
#include <strsafe.h>
#include "SysMets.h"
#include <math.h>

#define NUM 1000
#define R 100
#define PI 3.14159
#define TWOPI (2 * 3.14159)
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);


int WINAPI WinMain(HINSTANCE hInstance,
    HINSTANCE hPrevInstance,
    LPSTR lpCmdLine,
    int nShowCmd) {
    static TCHAR szAppName[] = TEXT("Bill");
    HWND hwnd;
    WNDCLASS wndclass;
    MSG msg;
    
    wndclass.cbClsExtra = 0;
    wndclass.cbWndExtra = 0;

    wndclass.hInstance = hInstance;
    wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
    wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
    wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
    wndclass.lpszClassName = szAppName;
    wndclass.lpszMenuName = NULL;
    wndclass.lpfnWndProc = WndProc;
    wndclass.style = CS_HREDRAW | CS_VREDRAW;

    RegisterClass(&wndclass);
    hwnd = CreateWindow(TEXT("Bill"), TEXT("Tip"), WS_OVERLAPPEDWINDOW | WS_HSCROLL | WS_VSCROLL,
        CW_USEDEFAULT, 40, CW_USEDEFAULT, 100,
        NULL, NULL, hInstance, NULL);

    ShowWindow(hwnd, nShowCmd);
    UpdateWindow(hwnd);
    while (GetMessage(&msg, NULL, 0, 0)) {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    return 0;

}

LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) {
    HDC hdc;
    PAINTSTRUCT ps;
    RECT rect;
    static int cxClient, cyClient;
    static TCHAR szBuffer[128];
    POINT apt1[5] = { 100, 100, 200, 100, 200, 200, 100, 200, 100, 100 };
    POINT apt2[4] = { 300, 100, 400, 100, 400, 200, 300, 200 };
    POINT star[5];
    POINT ptCenter;
    int i;
    HBRUSH hBrush;
    HGDIOBJ hOldBrush;
    switch (message) {
    case WM_PAINT:
        hdc = BeginPaint(hwnd, &ps);
        
        //设定五角星的中心点的位置
        GetClientRect(hwnd, &rect);
        ptCenter.x = (rect.right - rect.left) / 2;
        ptCenter.y = (rect.bottom - rect.top) / 2;

        //左上点
        star[0].x = ptCenter.x - (int)(R * sin(2 * PI / 5));
        star[0].y = ptCenter.y - (int)(R * cos(2 * PI / 5));

        //右上点
        star[1].x = ptCenter.x + (int)(R * sin(2 * PI / 5));;
        star[1].y = ptCenter.y - (int)(R * cos(2 * PI / 5));;

        //左下点
        star[2].x = ptCenter.x - (int)(R * sin(PI / 5));
        star[2].y = ptCenter.y + (int)(R * cos(PI / 5));
        
        //顶点
        star[3].x = ptCenter.x;
        star[3].y = ptCenter.y - R;

        //右下点
        star[4].x = ptCenter.x + (int)(R*sin(PI / 5));
        star[4].y = ptCenter.y + (int)(R*cos(PI / 5));

        hBrush = CreateSolidBrush(RGB(255,255,0));
        hOldBrush = SelectObject(hdc, hBrush);
        Polygon(hdc, star, 5);
        /*star[5] = star[0];

        MoveToEx(hdc, star[0].x, star[0].y, NULL);
        for (int i = 0; i < 6; i++) {
            LineTo(hdc, star[i].x, star[i].y);
        }
        */
        DeleteObject(SelectObject(hdc, hOldBrush));
        EndPaint(hwnd, &ps);
        return 0;

    case WM_DESTROY:
        PostQuitMessage(0);
        return 0;
    }

    return DefWindowProc(hwnd, message, wParam, lParam);
}

结果图

Result.png
上一篇 下一篇

猜你喜欢

热点阅读