我使用不同的WinGDI函数将数据发送到打印机,这里使用函数Polyline()发送矢量数据。现在我想为这条折线设置一个颜色,所以我尝试在Polyline()调用之前调用函数SetDCPenColor()和SetDCBrushColor()。
不幸的是,他们没有任何影响,结果线仍然是黑色。那么......这里可能出现什么问题?哪个是改变这种折线颜色的正确功能?
谢谢!
编辑:不起作用的代码
SetDCPenColor(*pdc,RGB(rval,gval,bval));
Polyline(*pdc,points,n);
答案 0 :(得分:0)
除非您在DC中选择了DC笔和/或画笔,否则设置DC笔和画笔颜色没有任何效果。默认情况下,它们未被选入DC。
PAINTSTRUCT ps;
::BeginPaint(hwnd, &ps);
::SetDCPenColor(ps.hdc, RGB(0xFF, 0x00, 0x00)); // has no effect
::MoveToEx(ps.hdc, x0, y0, nullptr);
::LineTo(ps.hdc, x1, y1);
::EndPaint(hwnd, &ps);
要使用DC笔或画笔,您需要先在DC中选择DC对象。
PAINTSTRUCT ps;
::BeginPaint(hwnd, &ps);
auto oldPen = ::SelectObject(ps.hdc, ::GetStockObject(DC_PEN)); // <<<<
::SetDCPenColor(ps.hdc, RGB(0xFF, 0x00, 0x00)); // now this works
::MoveToEx(ps.hdc, x0, y0, nullptr);
::LineTo(ps.hdc, x1, y1);
::SelectObject(ps.hdc, oldPen); // remember to select it back out
::EndPaint(hwnd, &ps);