Windows Practice_闹钟(四)_GDI对象概述

GDI对象概述

在使用GDI绘制的时候,我们需要注意两套坐标体系,一个是对于当前界面程序的原点坐标,一个是对于桌面(系统)的原点坐标。
所以以后在看到和DC相关的函数时,它都代表和DC有关的坐标,比如TExtOut函数,它的就是和DC相关的函数。
TextOut在指定位置输出指定长度的字符串。函数原型如下:

BOOL TextOut(
  _In_ HDC     hdc,
  _In_ int     nXStart,
  _In_ int     nYStart,
  _In_ LPCTSTR lpString,
  _In_ int     cchString
);

DrawText在指定矩形区域格式化文本,根据指定的方式格式化文本。
函数原型如下:

int DrawText(
  _In_    HDC     hDC,
  _Inout_ LPCTSTR lpchText,
  _In_    int     nCount,
  _Inout_ LPRECT  lpRect,
  _In_    UINT    uFormat
);

简单的例子

case WM_PAINT:
        {
            PAINTSTRUCT ps;
            HDC hdc = BeginPaint(hWnd, &ps);
            // TODO: 在此处添加使用 hdc 的任何绘图代码...

            // 画线的函数
            // TextOut
            // DrawText()  更多的是在标签上面写字符串,它会随着
            RECT rectClient = { 0 };
            GetClientRect(hWnd, &rectClient);
            std::wstring wstrBuffer = L"七夕快乐";
            COLORREF oldColor = SetTextColor(hdc, RGB(255, 0, 0));
            LOGFONT font = { 0 };
            font.lfWidth = 40;
            font.lfHeight = 80;
            font.lfCharSet = GB2312_CHARSET;
            wcscpy_s(font.lfFaceName, L"宋体");
            HFONT hFont = CreateFontIndirect(&font);
            HFONT hOldFont = (HFONT)SelectObject(hdc, hFont);

            HBRUSH hbrush = CreateHatchBrush(HS_CROSS, RGB(0, 0, 0));
            //HBRUSH hbrush = CreateSolidBrush(RGB(0, 0, 0));
            HBRUSH oldBrush = (HBRUSH)SelectObject(hdc, hbrush);

            //SelectObject(hdc, GetStockObject(HOLLOW_BRUSH));
            //SelectObject(hdc, GetStockObject(NULL_PEN));
            //SelectObject(hdc, GetStockObject(BLACK_PEN));

            DrawText(hdc, wstrBuffer.c_str(), wstrBuffer.length(), &rectClient, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
            Ellipse(hdc, rectClient.left, rectClient.top, rectClient.right, rectClient.bottom);

            SetTextColor(hdc, oldColor);
            SelectObject(hdc, hOldFont);
            SelectObject(hdc, oldBrush);
            DeleteObject(hFont);

            DeleteObject(hbrush);


            // 画点的函数
            //SetPixel()
            SetPixel(hdc, 100, 100, RGB(0, 0, 0));

            // 阴影



            EndPaint(hWnd, &ps);
        }

通过这个小示例我们基本了解了一些GDI对象。其中包括字体、画笔、画刷(包括系统画刷以及自定义的画刷)等GDI对象。需要注意的是,这些我们创建的GDI对象都需要我们手动的去释放掉,否则会造成内存泄漏。
虽然GDI目前不是很流行了,但是我们还是需要了解这些基础的绘制方法,这对于以后学习其它的绘制工具。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值