【问题标题】:wxWidgets wxPen size changes unexpectedlywxWidgets wxPen 大小意外更改
【发布时间】:2015-06-01 10:12:02
【问题描述】:

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

(这里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 中正确显示

在 linux 中笔的大小意外改变。

非常感谢您的帮助。

【问题讨论】:

    标签: c++ drawing wxwidgets


    【解决方案1】:

    如果相同的代码在 wxMSW 和 wxGTK 中的行为不同,那么它可能是 wxWidgets 本身的一个错误,但是要修复它需要以某种简单的测试方式重现,最好是对 wxWidgets 进行尽可能小的更改@ 987654321@ 和 opening a ticket 将此更改作为补丁附加到它。

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

    1. 摆脱wxThePenList,直接创建笔。错误不太可能在这里,但谁知道呢。
    2. 检查是否不是由于SetCap() 调用,这是最有可能的候选人恕我直言。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-25
      相关资源
      最近更新 更多