中年人学C语言Windows程序设计,14窗口绘画:画刷

CreateSolidBrush

函数功能:

CreateSolidBrush 函数用于创建一个指定颜色的逻辑画刷。

API 函数原型:

注释:In 说明该参数是输入的。

HBRUSH CreateSolidBrush(
  _In_  COLORREF crColor
);

参数解析:

参数 含义
crColor 1. 指定画刷的 RGB 颜色
2. RGB 颜色使用 RGB 宏生成 COLORREF 结构

返回值:

  1. 如果函数调用成功,返回值是新画刷的句柄;

  2. 如果函数调用失败,返回值是 NULL。

备注:

  1. 如果你再也不需要该画刷,可以使用 DeleteObject 函数将其删除。

  2. 实心画刷实际上就是指系统用来绘制要填充图形的内部区域的位图。

  3. 调用该函数创建新画刷之后,可以使用 SelectObject 函数将新画刷选入设备环境中。

  4. 当要使用系统画刷的时候,应用程序应该使用 GetSysColorBrush(iIndex) 代替 CreateSolidBrush(GetSysColor(nIndex))。因为 GetSysColorBrush 函数会使用缓存好的画刷而不用重新创建一个新的。

ICM:在创建刷子时没有颜色操作。 然而,当把该刷子选入ICM许可的设备环境中时,将进行颜色管理。

CreateHatchBrush

函数功能:

CreateHatchBrush 函数用于创建一个具有指定阴影样式和颜色的逻辑刷子。

API 函数原型:

注释:In 说明该参数是输入的。

HBRUSH CreateHatchBrush(
  _In_  int fnStyle,
  _In_  COLORREF clrref
);

参数解析:

参数 含义
fnStyle 指定画刷的阴影样式(具体请看下方)
clrref 1. 指定用于画刷阴影的前景色
2. RGB 颜色使用 RGB 宏生成 COLORREF 结构

fnStyle 参数指定画刷的阴影样式如下:

值 含义
HS_BDIAGONAL 45 度向上,从左至右的阴影
HS_CROSS 水平和垂直交叉阴影
HS_DIAGCROSS 45 度交叉阴影
HS_FDIAGONAL 45 度向下,自左至右阴影
HS_HORIZONTAL 水平阴影
HS_VERTICAL 垂直阴影

样式具体显示如下:

在这里插入图片描述

返回值:

  1. 如果函数调用成功,返回值是新画刷的句柄;

  2. 如果函数调用失败,返回值是 NULL。

备注:

  1. 阴影画刷实际上就是指系统用来绘制要填充图形的内部区域的位图。

  2. 调用该函数创建新画刷之后,可以使用 SelectObject函数将新画刷选入设备环境中。

  3. 调用 SetBkColor 函数可以修改画刷图案的背景色。

  4. 调用 SetBkMode 函数可以影响搞该阴影画刷的渲染效果(如果是 OPAQUE 模式,背景颜色被用来填充线与线之间的空隙;如果是 TRANSPARENT 模式,Windows 就只画出阴影线,不填充它们之间的空隙)。

  5. 如果应用程序使用带阴影的刷子,用合适的颜色填充父窗口和子窗口的背景,那么在绘刷子窗口的背景之前,有可能需要设置刷子的起始点。要做到这一点,可以在应用程序中调用 SetBrushOrgEx 函数。

  6. 如果你再也不需要该画刷,可以使用 DeleteObject 函数将其删除。

ICM:在创建刷子时没有颜色,然而在把该刷子选入到ICM许可的设备环境中时,将会完成颜色管理。

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    回调函数
    参数:
    hwnd : 窗口句柄
    message : 消息ID
    wParam和lParam:消息参数
        //int i;
        //size_t j;
    HDC hdc;//定义设备环境句柄  
    static TCHAR  szBuffer[128];
    //TEXTMETRIC tm;
   // SCROLLINFO si;
    PAINTSTRUCT ps;
    RECT rect;
    size_t iStrLength;
    static int cxChar, cyChar, cxClient, cyClient;
    HBRUSH hNewBrush, hOldBrush;
    switch (message)
    {
        case WM_SIZE://窗体大小改变
            hdc = GetDC(hWnd);
            //GetClientRect(hwnd, &rect);
            cxClient = LOWORD(lParam);//当前x像素
            cyClient = HIWORD(lParam);//当前y像素
            StringCchPrintf(szBuffer, 128, TEXT("当前客户区的分辨率:%d * %d px"), cxClient, cyClient);
            StringCchLength(szBuffer, 128, &iStrLength);
            SetTextAlign(hdc, TA_CENTER | TA_TOP);
            TextOut(hdc, cxClient / 2, 0, szBuffer, iStrLength);
            ReleaseDC(hWnd, hdc);
            return 0;

        case WM_PAINT://窗口绘画:点
        {
            //int x, xLast;
            HDC hdc = BeginPaint(hWnd, &ps);//函数为指定窗口进行绘画作准备,并用将和绘画有关的信息填充到一个 PAINTSTRUCT 结构中。
           
            TextOut(hdc, 100, 100, TEXT("NIHAOMA"), 7);
            //系统预设画刷
            hNewBrush = GetStockObject(WHITE_BRUSH);
            hOldBrush = SelectObject(hdc, hNewBrush);
            Ellipse(hdc, 50, 50, 150, 150);

            //透明画刷
            TextOut(hdc, 250, 100, TEXT("NIHAOMA"), 7);
            hNewBrush = GetStockObject(NULL_BRUSH);
            hOldBrush = SelectObject(hdc, hNewBrush);
            Ellipse(hdc, 200, 50, 300, 150);


            //自定义画刷
            hNewBrush = CreateSolidBrush( RGB(255, 0, 255));
            hOldBrush = SelectObject(hdc, hNewBrush);
            Ellipse(hdc, 400, 50, 500, 150);

           

            //背景阴影画刷1
            SetBkColor(hdc, RGB(0, 0, 0));//画刷背景颜色黑色
            hNewBrush = CreateHatchBrush(HS_DIAGCROSS,RGB(0, 0, 255));
            hOldBrush = SelectObject(hdc, hNewBrush);
            Rectangle(hdc, 50, 200, 250, 400);

           
            //背景阴影画刷2
            SetBkMode(hdc, TRANSPARENT);//画刷背景 透明
            hNewBrush = CreateHatchBrush(HS_BDIAGONAL,RGB(255, 0, 0));
            hOldBrush = SelectObject(hdc, hNewBrush);
            Rectangle(hdc, 300, 200, 500, 400);

            //背景阴影画刷3
            SetBkMode(hdc, OPAQUE);//画刷背景为填充颜色
            SetBkColor(hdc, RGB(255, 255, 255));//画刷背景颜色白色
            hNewBrush = CreateHatchBrush(HS_CROSS, RGB(0, 255, 0));
            hOldBrush = SelectObject(hdc, hNewBrush);
            Rectangle(hdc, 500, 200, 700, 400);


            DeleteObject(hNewBrush);
            EndPaint(hWnd, &ps);
            return 0;
        }
        case WM_DESTROY:
            PostQuitMessage(0);
            break;
        default:
            return DefWindowProc(hWnd, message, wParam, lParam);
        }
    return 0;
}

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值