gpt4 book ai didi

c++ - wxWidgets wxScrolledWindow 取消之前的绘制

转载 作者:行者123 更新时间:2023-11-28 02:46:02 27 4
gpt4 key购买 nike

我正在尝试获得一个滚动面板,我可以在其中像在 MS Paint 上一样绘制图片
问题是,当我画一些东西来尝试应用程序时:

  1. 我画了一个(或多个)矩形
  2. 我向右滚动面板,矩形保持在左侧
  3. 我向左滚动面板,矩形消失了

我是 wx 的新手,我想我遗漏了一些重要的东西
在 Codelite (C++)、Windows 7 32 位中使用 wxWidget

那是代码:

editorshp.h

class EditorShp : public wxFrame {
protected:
wxClientDC *dcPannelloDisegno;
wxScrolledWindow *scrollwin;
wxPanel *pannello;

public:
EditorShp( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Editor SHP"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 800,500 ), long style = wxDEFAULT_FRAME_STYLE|wxTAB_TRAVERSAL );

void draw_temp(wxCommandEvent& WXUNUSED(event));
};

editorshp.cpp
PS:bDrawTemp 是我用来绘制一些矩形的按钮(第一个在点 100,100;第二个在 200,100 等等)

EditorShp::EditorShp( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : wxFrame( parent, id, title, pos, size, style ) {

scrollwin = new wxScrolledWindow(this, -1, wxPoint(0, 0), wxSize(700, 400));
scrollwin->SetScrollbars(1, 1, 1600, 1000, 0, 0);

pannello = new wxPanel(scrollwin, -1, wxPoint(0, 0), wxSize(700, 400), wxFULL_REPAINT_ON_RESIZE);
dcPannelloDisegno = new wxClientDC(pannello);
scrollwin->DoPrepareDC(*dcPannelloDisegno);

wxButton *bDrawTemp= new wxButton( this, wxID_ANY, _("Indietro"), wxPoint(0, 400), wxSize( 100, 24 ), 0 );
bDrawTemp->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(EditorShp::disegnaTemp), NULL, this);

scrollwin->Show(true);
this->Show(true);
}

void EditorShp::draw_temp(wxCommandEvent& WXUNUSED(event)){
static int x = 100, y = 100;

dcPannelloDisegno->DrawRectangle(wxPoint(x, y), wxSize(10, 10));
//pannello->Refresh(); it cancels everything
pannello->Update();

x += 100;
x = x % 1600;
}

编辑 1: 抱歉,它不是 wxScrollingPanel,而是 wxScrolledWindow

最佳答案

首先,捕获 wxEVT_PAINT 并使用 wxPaintDC(或其变体之一 - wx[Auto]BufferedPaintDC)在其 hadler 中进行绘图>).其次,您现在正尝试在 pannello 上绘画,为此您不需要准备 wxDC。但是,根据您的描述,您希望在 scrollwin 上绘画,在这种情况下,您甚至可能不需要 pannello

因此,要在滚动窗口上绘图,请参阅 wxW 附带的 scroll 示例。您可能需要的是 MySimpleCanvas 的实现(被描述为 一个绘制简单矩形的滚动窗口)- 在运行时按 F1 查看它样本。

作为一般规则,样本应该是搜索功能的第一个地方;那里有很多例子。

关于c++ - wxWidgets wxScrolledWindow 取消之前的绘制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24411942/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com