Windows程序设计:画笔

来源:互联网 发布:铜排折弯最简单的算法 编辑:程序博客网 时间:2024/05/20 03:44

在Windows程序中,我们用画笔来绘制图形

通过HPEN来创建画笔句柄:

static HPEN hPen1, hPen2, hPen3;   //画笔句柄

然后通过创建画笔函数创建画笔:

HPEN CreatePen(  _In_ int      fnPenStyle,    //画笔的风格  _In_ int      nWidth,        //占有像素  _In_ COLORREF crColor        //颜色);


创建实例:

case WM_CREATE: {hPen1 = CreatePen(PS_SOLID, 10, RGB(0,0,255));hPen2 = CreatePen(PS_SOLID, 10, RGB(255,0,0));hPen3 = CreatePen(PS_SOLID, 15, RGB(0,255,0));}break;

画笔的可选样式:

#define PS_SOLID            0#define PS_DASH             1       /* -------  */#define PS_DOT              2       /* .......  */#define PS_DASHDOT          3       /* _._._._  */#define PS_DASHDOTDOT       4       /* _.._.._  */#define PS_NULL             5

备用画笔:系统已经预定义好的画笔,可以直接被拿来用(注:备用画笔不能被删除!!)

GetStockObject(BLACK_PEN)


具体使用案例:

首先创建画笔和获取窗体的长宽

static HPEN hPen1, hPen2, hPen3;   //画笔句柄static HPEN hOldPen;               //旧的画笔 用来保存static int cxClient;  //x坐标static int cyClient;  //y坐标static int LineDis;   //线段的数量static int lineWidth = 10;

窗体缩放时长宽变化的数据:

case WM_SIZE: {cxClient = LOWORD(lParam);cyClient = HIWORD(lParam);}break;

画笔的创建:
case WM_CREATE: {hPen1 = CreatePen(PS_DASH, 1, RGB(0,0,255));hPen2 = CreatePen(PS_SOLID, 10, RGB(255,0,0));hPen3 = CreatePen(PS_SOLID, 15, RGB(0,255,0));}break;


画线:
    case WM_PAINT:        {            PAINTSTRUCT ps;            HDC hdc = BeginPaint(hWnd, &ps);           //通过selectObject来选择画笔LineDis = cyClient / (3 + 1);hOldPen = (HPEN)SelectObject(hdc, hPen1);    //保存旧画笔MoveToEx(hdc, cxClient/10, LineDis, NULL);   LineTo(hdc, cxClient*9/10, LineDis);SelectObject(hdc, hPen2);    //选用一支新的画笔赋予hdc句柄MoveToEx(hdc, cxClient / 10, LineDis*2, NULL);LineTo(hdc, cxClient * 9 / 10, LineDis*2);SelectObject(hdc, hPen3);    //选用一支新的画笔赋予hdc句柄MoveToEx(hdc, cxClient / 10, LineDis*3, NULL);LineTo(hdc, cxClient * 9 / 10, LineDis*3);SelectObject(hdc, GetStockObject(BLACK_PEN));   //选用一支系统画笔赋予hdc句柄MoveToEx(hdc, cxClient / 2, 0, NULL);LineTo(hdc, cxClient / 2, cyClient);            EndPaint(hWnd, &ps);        }        break;

使用完毕后一定要删除画笔:

case WM_DESTROY: {DeleteObject(hPen1);DeleteObject(hPen2);DeleteObject(hPen3);PostQuitMessage(0);}break;


绘画效果如下:








原创粉丝点击