Winapi 为多段线()设置笔/颜色?
我使用不同的WinGDI函数向打印机发送数据,这里使用函数Polyline()发送矢量数据。现在我想为这条多段线设置一种颜色,所以我尝试在调用polyline()之前调用函数SetDCPenColor()和SetDCBrushColor() 不幸的是,它们都没有任何影响,产生的线条仍然是黑色的。那么…这里有什么问题?更改此类多段线颜色的正确功能是什么 谢谢 编辑:不起作用的代码Winapi 为多段线()设置笔/颜色?,winapi,gdi+,gdi,Winapi,Gdi+,Gdi,我使用不同的WinGDI函数向打印机发送数据,这里使用函数Polyline()发送矢量数据。现在我想为这条多段线设置一种颜色,所以我尝试在调用polyline()之前调用函数SetDCPenColor()和SetDCBrushColor() 不幸的是,它们都没有任何影响,产生的线条仍然是黑色的。那么…这里有什么问题?更改此类多段线颜色的正确功能是什么 谢谢 编辑:不起作用的代码 SetDCPenColor(*pdc,RGB(rval,gval,bval)); Polyline(*pdc,poin
SetDCPenColor(*pdc,RGB(rval,gval,bval));
Polyline(*pdc,points,n);
除非在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);
PAINTSTRUCT-ps;
::开始油漆(hwnd和ps);
自动oldPen=::SelectObject(ps.hdc,::GetStockObject(DC_PEN));//您是否正在使用SelectObject在设备上下文中选择已创建的笔?如果是,请添加失败的代码。Alex K。参见上面的代码,我只是在绘图之前设置颜色……您需要创建一支钢笔,然后选择它,如中所示。@Alex K。明白了-谢谢!