一、绘图基础
- 绘图设备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);
}