代码之家  ›  专栏  ›  技术社区  ›  Jive Dadson hmishra2250

如何构造简单的wxwidgets图像显示

  •  6
  • Jive Dadson hmishra2250  · 技术社区  · 15 年前

    我写了一个wxpython程序,我正在把它翻译成wxwidgets。程序有一个显示图像的滚动窗口。随着敲击声, wxpython正在运行 (清单12.1),我在一个面板中使用了一个静态位图。在浏览最新的wxwidgets文档时,我发现 dire warning wxstaticbitmap应该只用于非常小的图像。上面写着,“…如果你想便携地显示更大的图像,你应该使用你自己的控件。向我展示。我没有自己的控制权。

    rappin是错了,还是文档过时了?

    毫无疑问,一个新手的问题是,在wxwidgets中使用简单的图像视图窗口的正确方法是什么?顺便替换wxstaticbitmap就好了。我查看了wxwidgets“samples”目录中的“image”程序。只要 战争与和平。 当然,一定有罐头类或简单的食谱。

    2 回复  |  直到 10 年前
        1
  •  3
  •   mghie    15 年前

    不要让“图像”示例的大小愚弄您,只需要几行代码就可以完成您想要的任务。

    搜索 MyImageFrame 类中 图像CPP 它只不过是一个具有私有位图字段的类,一个用于设置位图和窗口客户端大小的自定义构造函数,以及 EVT_PAINT :

    void OnPaint(wxPaintEvent& WXUNUSED(event))
    {
        wxPaintDC dc( this );
        dc.DrawBitmap( m_bitmap, 0, 0, true /* use mask */ );
    }
    

    既然你不想要一个框架类,你的诀窍是:创建一个简单的 wxWindow 具有类似的构造函数、绘制处理程序和复制 wxStaticBitmap 你在代码中使用的。也许只需要一种方法来设置一个新的位图,并将控件的大小调整为新的位图尺寸。

        2
  •  2
  •   Jive Dadson hmishra2250    15 年前
    // A scrolled window for showing an image.
    class PictureFrame: public wxScrolledWindow
    {   
    public:
        PictureFrame()
            : wxScrolledWindow()
            , bitmap(0,0)
        {;}
    
        void Create(wxWindow *parent, wxWindowID id = -1)
        {
            wxScrolledWindow::Create(parent, id);
        }
    
        void LoadImage(wxImage &image) {
            bitmap = wxBitmap(image);
            SetVirtualSize(bitmap.GetWidth(), bitmap.GetHeight());
            wxClientDC dc(this);
            PrepareDC(dc);
            dc.DrawBitmap(bitmap, 0, 0);
        }
    
    protected:
        wxBitmap bitmap;
    
        void OnMouse(wxMouseEvent &event) {
            int xx,yy;
            CalcUnscrolledPosition(event.GetX(), event.GetY(), &xx, &yy);
            event.m_x = xx; event.m_y = yy;
            event.ResumePropagation(1); // Pass along mouse events (e.g. to parent)
            event.Skip();
        }
    
        void OnPaint(wxPaintEvent &event) {
            wxPaintDC dc(this);
            PrepareDC(dc);
            dc.DrawBitmap(bitmap, 0,0, true);
        }
    private:
        DECLARE_EVENT_TABLE()
    };
    
    BEGIN_EVENT_TABLE(PictureFrame,wxScrolledWindow)
        EVT_PAINT(PictureFrame::OnPaint)
        EVT_MOUSE_EVENTS(PictureFrame::OnMouse)
    END_EVENT_TABLE()