2017-04-05 410 views
0

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

不幸的是,他们没有任何影响,结果线条仍然是黑色的。所以...这里有什么可能是错的?哪个是改变这种多段线颜色的正确功能?

谢谢!

编辑:不工作

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

您是否将选中的笔创建到设备上下文中?如果你是请添加失败的代码。 –

+0

Alex K.请参阅上面的代码,我只是在绘制之前设置颜色... – Elmi

+1

您需要创建一支笔,然后在[设置笔或刷子颜色]中选择它(https://msdn.microsoft.com/ EN-US /库/窗/桌面/ dd145096(v = vs.85)的.aspx)。 –

回答

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