CreateSolidBrush
函数功能:
CreateSolidBrush 函数用于创建一个指定颜色的逻辑画刷。
API 函数原型:
注释:In 说明该参数是输入的。
HBRUSH CreateSolidBrush(
_In_ COLORREF crColor
);
参数解析:
参数 含义
crColor 1. 指定画刷的 RGB 颜色
2. RGB 颜色使用 RGB 宏生成 COLORREF 结构
返回值:
-
如果函数调用成功,返回值是新画刷的句柄;
-
如果函数调用失败,返回值是 NULL。
备注:
-
如果你再也不需要该画刷,可以使用 DeleteObject 函数将其删除。
-
实心画刷实际上就是指系统用来绘制要填充图形的内部区域的位图。
-
调用该函数创建新画刷之后,可以使用 SelectObject 函数将新画刷选入设备环境中。
-
当要使用系统画刷的时候,应用程序应该使用 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 垂直阴影
样式具体显示如下:
返回值:
-
如果函数调用成功,返回值是新画刷的句柄;
-
如果函数调用失败,返回值是 NULL。
备注:
-
阴影画刷实际上就是指系统用来绘制要填充图形的内部区域的位图。
-
调用该函数创建新画刷之后,可以使用 SelectObject函数将新画刷选入设备环境中。
-
调用 SetBkColor 函数可以修改画刷图案的背景色。
-
调用 SetBkMode 函数可以影响搞该阴影画刷的渲染效果(如果是 OPAQUE 模式,背景颜色被用来填充线与线之间的空隙;如果是 TRANSPARENT 模式,Windows 就只画出阴影线,不填充它们之间的空隙)。
-
如果应用程序使用带阴影的刷子,用合适的颜色填充父窗口和子窗口的背景,那么在绘刷子窗口的背景之前,有可能需要设置刷子的起始点。要做到这一点,可以在应用程序中调用 SetBrushOrgEx 函数。
-
如果你再也不需要该画刷,可以使用 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;
}