为Polyline()设置笔/颜色?

时间:2017-04-05 11:04:02

标签: winapi gdi+ gdi

我使用不同的WinGDI函数将数据发送到打印机,这里使用函数Polyline()发送矢量数据。现在我想为这条折线设置一个颜色,所以我尝试在Polyline()调用之前调用函数SetDCPenColor()和SetDCBrushColor()。

不幸的是,他们没有任何影响,结果线仍然是黑色。那么......这里可能出现什么问题?哪个是改变这种折线颜色的正确功能?

谢谢!

编辑:不起作用的代码

SetDCPenColor(*pdc,RGB(rval,gval,bval));
Polyline(*pdc,points,n);

1 个答案:

答案 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);