学习windows编程 day3 之 自定义画笔的两种方法

时间:2023-03-08 22:51:37
学习windows编程 day3 之 自定义画笔的两种方法
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps;
RECT rect;
HPEN hPen, hOldPen; switch (message)
{
case WM_PAINT:
hdc = BeginPaint(hwnd, &ps);
GetClientRect(hwnd, &rect);
//1.获取画笔
//hPen=GetStockObject(BLACK_PEN);
//2.自己新建画笔
//方法一:
//封闭图像时,使用线宽中间作为边界,所以会比想要的大小多出来一部分(线宽大小)
//hPen = CreatePen(PS_SOLID, 100, RGB(255,0,0));
//对于虚线而言,若是线宽大于1则会显示实现,原来线条的样式失效
//hPen = CreatePen(PS_DASH ,0.1, RGB(255, 0, 0));
//hPen = CreatePen(PS_DASHDOT, 0.1, RGB(255, 0, 0));
//hPen = CreatePen(PS_DASHDOTDOT, 0.1, RGB(255, 0, 0));
//用于封闭图像的使用:在后面可以进行填充 边框向内压缩
//hPen = CreatePen(PS_INSIDEFRAME, 10, RGB(255, 0, 0)); //方法二:
LOGPEN pen[];
for (int i = ; i < ;i++)
{
pen[i].lopnStyle = PS_SOLID;
pen[i].lopnWidth.x = (i + ) * ;
pen[i].lopnColor = RGB( * i, , );
}
//设置多个画笔样式
//使用createpenindorect直接取出样式使用,代码简洁明了,也更加具有可重用性
for (int i = ; i < ;i++)
{
hPen = CreatePenIndirect(&pen[i]); hOldPen = SelectObject(hdc, hPen); Ellipse(hdc, +*i, , +*i, ); DeleteObject(hPen);
} // MoveToEx(hdc, rect.left, (rect.bottom-rect.top) / 2, NULL);
// LineTo(hdc, rect.right, (rect.bottom - rect.top) / 2); //只能删除自己定义的对象,系统带有的不允许删除
//DeleteObject(hPen);
SelectObject(hdc, hOldPen); EndPaint(hwnd, &ps); break;
case WM_DESTROY:
PostQuitMessage();
return ;
} return DefWindowProc(hwnd, message, wParam, lParam);
}