一、绘图基础
- 绘图设备DC(Device Context),绘图上下文/绘图描述表
- HDC:DC句柄,表示绘图设备
- GDI:Windows graphics device interface(Win32提供的绘图API)
- 颜色的使用:COLORREF:实际DWORD;例如:COLORREF nColor = 0;
- 赋值使用RGB宏:例如:nColor = RGB(0,0, 255)
- 获取RGB值:GetRValue/GetGValue/GetBValue;例如:BYTE nRed = GetRValue(nColor)
计算机使用红、绿、蓝:
R:0~255
G:0~255
B:0~255
每一个颜色是3个字节24位,保存范围:0~2^24-1
二、基本图形绘制
(1).SetPixel设置指定点的颜色
COLORREF SetPixel( HDC hdc, //DC句柄 int x,//X坐标 int y,//Y坐标 COLORREF crColor//设置的颜色 );
返回指定点原来的颜色
示例代码:
void OnDrawPoint(HDC hdc) { for (int i = 0; i < 256; i++) { for (int j = 0; j < 256; j++) { SetPixel(hdc, i, j, RGB(i, j, 0)); } } } void OnPaint(HWND hWnd) { PAINTSTRUCT ps = { 0 }; HDC hdc = BeginPaint(hWnd, &ps); OnDrawPoint(hdc); EndPaint(hWnd, &ps); } //窗口处理函数(自定义,处理消息) LRESULT CALLBACK WindProc(HWND hWnd, UINT msgID, WPARAM wParam, LPARAM lParam) { switch (msgID) { case WM_PAINT: { OnPaint(hWnd); break; } default: break; } return DefWindowProc(hWnd, msgID, wParam, lParam); }
(2).线的使用(直接,弧线)
- MoveToEx:指名窗口当前点
- LineTo:从窗口当前点到指定点绘制一条直线
- 当前点:上一次绘图时最后一点,初始为(0,0)点
示例代码:
void OnDrawLine(HDC hdc) { //改变窗口当前点坐标 MoveToEx(hdc, 100, 100, NULL); LineTo(hdc, 300, 300); LineTo(hdc, 0, 300); }
(3).封闭图形:能够用画刷填充的图形(Rectangle/Ellipse)
示例代码:
void OnDrawRect(HDC hdc) { Rectangle(hdc, 100, 100, 300, 300); } void OnDrawEll(HDC hdc) { Ellipse(hdc, 100, 100, 300, 300); }
标签:绘图,300,hWnd,编程,Win32,hdc,HDC,100 From: https://www.cnblogs.com/TechNomad/p/17697985.html