c++ - wxWidgets wxPen 大小意外改变

标签 c++ drawing wxwidgets

我使用以下代码通过 wxMemoryDC 在图像上绘制。 为此,我使用了 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

非常感谢您的帮助。

最佳答案

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

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

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

关于c++ - wxWidgets wxPen 大小意外改变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30570807/

相关文章:

python - wxpython中缩放图片时的问题

c++ - wxWidgets wxPanel访问Create函数中创建的wxPanelNameStr

c++ - 使用捆绑属性作为 dijkstra_shortest_paths 中的权重图

c++ - 声明指针变量的不同类型

text - Win32 文本绘图拼图

UIView CGGradient 剪切到绘制的 "frame"

python - wxPython - UltimateListCtrl.ScreenToClient 类型错误

c++ - wxListBox - 段错误

c++ - 组合访问

c++ - 如何更改 Qt 中的工具包以针对 x86 机器?