2017-04-05 14 views
0

異なるWinGDI関数を使用してプリンタにデータを送信します。ここではベクトルデータは関数Polyline()を使用して送信されます。今度はこのポリラインの色を設定したいので、Polyline()呼び出しの前にSetDCPenColor()とSetDCBrushColor()関数を呼び出そうとしました。ポリライン()のペン/カラーを設定しますか?

残念ながら、いずれも影響を受けていないため、結果の線はまだ黒です。それで...ここで何が間違っているの?そのようなポリラインの色を変更する正しい関数はどれですか?

ありがとうございます!

編集:DCペンおよび/またはDCに選択したブラシを持っていない限り、DCペンとブラシの色を設定

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

作成したペンをSelectObjectでデバイスコンテキストに選択していますか?あなたがしている場合は、失敗したコードを追加してください。 –

+0

Alex K.上記のコードを参照して、描画する前に色を設定しました... – Elmi

+1

[ペンまたはブラシの色を設定する]のようにペンを作成して選択する必要があります(https://msdn.microsoft.com/ ja-jp/library/windows/desktop/dd145096(v = vs.85).aspx)。 @AlexK。 –

答えて

0

動作しないコードは影響しません。デフォルトでは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); 
関連する問題