学习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[10];
        for (int i = 0; i < 10;i++)
        {
            pen[i].lopnStyle = PS_SOLID;
            pen[i].lopnWidth.x = (i + 1) * 5;
            pen[i].lopnColor = RGB(20 * i, 0, 0);
        }
        //设置多个画笔样式
        //使用createpenindorect直接取出样式使用,代码简洁明了,也更加具有可重用性
        for (int i = 0; i < 10;i++)
        {
            hPen = CreatePenIndirect(&pen[i]);

            hOldPen = SelectObject(hdc, hPen);

            Ellipse(hdc, 100+30*i, 100, 300+30*i, 200);

            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(0);
        return 0;
    }


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

 

posted @ 2018-03-04 23:04  山上有风景  阅读(455)  评论(0编辑  收藏  举报