Windows Practice_闹钟(四)_GDI对象概述
2017-08-29 01:44
246 查看
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目前不是很流行了,但是我们还是需要了解这些基础的绘制方法,这对于以后学习其它的绘制工具。
相关文章推荐
- Windows Practice_闹钟(六)_控件对象
- Windows Practice_闹钟(三)_作业讲解和GDI概述
- SharePoint Foundation 2010 托管客户端对象模型概述 --创建 Windows 控制台托管的客户端对象模型应用程序
- Windows 查找GDI对象泄漏
- 推动Windows的限制:USER和GDI对象 - 第1部分
- 推动Windows的限制:USER和GDI对象 - 第2部分
- Windows对象分类:用户对象、GDI对象、核心对象
- windows笔记-【内核对象线程同步】概述
- MFC Windows 程序设计->取消对GDI对象的选定
- 【笨嘴拙舌WINDOWS】GDI对象之位图
- 常见对象_Object类的概述、hashCode()方法、getClass()方法、toString()方法
- Windows via C/C++:线程调度——概述
- windows学习历程-IPC之互斥对象
- 使用WINDOWS的GDI开发游戏(4)
- 使用GDI在windows中绘图(一)——windows 4000 GDI原理
- Java面向对象开发方法概述
- Java并发编程学习——《Java Concurrency in Practice》学习笔记 4.对象的组合
- JavaScript基础--DOM对象(十三):(windows对象:history\location\navigator\screen\event)
- Windows进程同步之事件内核对象(Event)
- 凭什么要用面向对象编程——面向对象重要设计原则概述[转]