【问题标题】:Set pen/color for Polyline()?为折线()设置笔/颜色?
【发布时间】:2017-08-30 23:01:12
【问题描述】:

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

不幸的是,它们都没有任何影响,产生的线条仍然是黑色的。那么......这里可能有什么问题?改变这种折线颜色的正确函数是什么?

谢谢!

编辑:不起作用的代码

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

【问题讨论】:

  • 您是否正在使用 SelectObject 将您创建的笔选择到设备上下文中?如果你是,请添加失败的代码。
  • Alex K. 见上面的代码,我只是在绘制之前设置了颜色...
  • 你需要创建一支笔然后像Setting the Pen or Brush Color一样选择它。
  • @AlexK。明白了 - 谢谢!

标签: winapi gdi+ gdi


【解决方案1】:

除非您在 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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多