2017-04-05 86 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);