wxWidgets wxPen大小意外更改

时间:2015-06-01 10:12:02

标签: c++ drawing wxwidgets

我使用以下代码使用wxMemoryDC在Image上绘图。 为此,我使用了wxPen并更改了笔的设置,如下面的代码所示。代码在Windows环境中编译和运行完美。但是在Ubuntu中它绘制了线条,但是笔的大小在很短的时间内保持正确,然后笔的大小变得很小。(如图所示)这不是m_pensize变量的错误,因为它总是打印正确的值。为什么在ubuntu中它在Windows中正常工作时会如此奇怪?

(m_graphics是这里的memoryDC)

            if (x<m_backgroundImage.GetWidth() && y< m_backgroundImage.GetHeight()){
                m_graphics.SelectObject(m_maskImage);
                wxPen* pen;
                if (m_isDrawing){
                    pen = wxThePenList->FindOrCreatePen(*wxRED, m_penSize);
                    printf("Pen size is %d", m_penSize);
                }
                else{
                    pen = wxThePenList->FindOrCreatePen(*wxBLACK, m_penSize);
                }
                if (m_pentype != Circle){
                    pen->SetCap(wxCAP_PROJECTING);
                }
                m_graphics.SetPen(*pen);
                m_graphics.DrawLine(m_lastX,m_lastY,x,y);
                m_graphics.SelectObject(wxNullBitmap);
            }

在Windows中,它显示正确 enter image description here

在linux中笔的大小无意中发生了变化。 enter image description here

非常感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

如果相同的代码在wxMSW和wxGTK中表现不同,那么它可能是wxWidgets本身的一个错误,但要解决它需要以一些简单的测试方式进行复制,理想情况是对wxWidgets进行尽可能小的更改{ {3}}和drawing sample将此更改作为补丁添加到其中。

为了尽可能简化代码,我建议:

  1. 摆脱wxThePenList并直接创建笔。这个bug不太可能在这里,但是谁知道。
  2. 检查是否不是SetCap()来电,这是最有可能的候选人恕我直言。