学习windows编程 day4 之 矩形的操作

本文介绍了一个Windows平台下的绘图示例程序,详细展示了如何使用不同方法绘制和操作矩形,包括填充、翻转、偏移等,并通过具体代码实现解释了矩形的相关API函数。
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    HDC hdc;
    PAINTSTRUCT ps;
    static RECT rect,rect2,rect3;
    static cxClient, cyClient;
    static HBRUSH hBrush, hOldBrush;
    POINT pt;

    switch (message)
    {
    case WM_SIZE:
        cxClient = LOWORD(lParam);
        cyClient = HIWORD(lParam);
        break;
    case WM_LBUTTONDOWN:
        pt.x = LOWORD(lParam);
        pt.y = HIWORD(lParam);
        if (PtInRect(&rect2,pt))
        {
            MessageBox(NULL, L"clicked", L"info", NULL);
        }

        break;
    case WM_PAINT:
        hdc = BeginPaint(hwnd, &ps);
//处理矩形
//         rect.left = cxClient / 2 - 50;
//         rect.right = cxClient / 2 + 50;
//         rect.top = cyClient / 2 - 50;
//         rect.bottom = cyClient / 2 + 50;

        hBrush = CreateSolidBrush(RGB(255,0,0));
//1.fillrect    填充矩形
        //FillRect(hdc, &rect, hBrush);
//2.framerect    改画笔为画刷来绘制边框
        //FrameRect(hdc, &rect, hBrush);
//3.invertrect    翻转矩形内所有的像素
        //InvertRect(hdc, &rect);

//4.生成矩形SetRect
        SetRect(&rect, cxClient / 2 - 50, cyClient / 2 - 50, cxClient/2 + 50, cyClient/2 + 50);
//5.偏移矩形OffsetRect
        OffsetRect(&rect, -150, -150);
        FillRect(hdc, &rect, hBrush);
        InvertRect(hdc, &rect);    //先显示图像,后翻转
//6.增大减小,长宽同时InflateRect
        SetRect(&rect, cxClient / 2 - 50, cyClient / 2 - 50, cxClient / 2 + 50, cyClient / 2 + 50);
        InflateRect(&rect, 50, 30);
        FillRect(hdc, &rect, hBrush);
//7.setrectEmpty    设置矩形为空
        FillRect(hdc, &rect, hBrush);    //不会显示
//8.copyrect    多用在映射中
        CopyRect(&rect2, &rect);    //将rect的坐标拷贝给rect2
        SetRectEmpty(&rect);//将矩形的各个坐标设为0,则会显示rect2
        hBrush = CreateSolidBrush(RGB(255, 255, 0));
        FillRect(hdc, &rect2, hBrush);
//9.intersectrect    两个矩形交集
//10.unionrect        两个矩形并集
//11.Isrectempty    判断是否为空
//12.ptinrect        判断点是否在矩形中(重要)


        EndPaint(hwnd, &ps);
        break;
    case WM_DESTROY:
        PostQuitMessage(0);
        return 0;
    }


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

 

转载于:https://www.cnblogs.com/ssyfj/p/8511978.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值