LINUX.ORG.RU

wxWidgets


0

1

Имеется код:

#include "wx/wx.h"

class MyApp : public wxApp {
public:
	virtual bool OnInit();
};

class MyFrame : public wxFrame {
public:
	// Constructor
	MyFrame(const wxString& title);
	
	void DrawSimpleShapes();
	
	// Event handlers
	void OnQuit(wxCommandEvent& event);
	void OnAbout(wxCommandEvent& event);
	
private:
	// This class handles events
	DECLARE_EVENT_TABLE();
};

// Implements MyApp & GetAPP()
DECLARE_APP(MyApp);

// Give wxWidgets the means to create a MyApp object
IMPLEMENT_APP(MyApp);

// Initialize the application
bool MyApp::OnInit() {
	MyFrame *frame = new MyFrame(wxT("Minimal wxWidgets App"));
	frame->Show(true);
	frame->DrawSimpleShapes();
	return true;
}

// Event table from MyFrame
BEGIN_EVENT_TABLE(MyFrame, wxFrame)
	EVT_MENU(wxID_ABOUT, MyFrame::OnAbout)
	EVT_MENU(wxID_EXIT, MyFrame::OnQuit)
END_EVENT_TABLE()

void MyFrame::OnAbout(wxCommandEvent& event) {
	wxString msg;
	msg.Printf(wxT("Hello and welcome to %s"), wxVERSION_STRING);
	wxMessageBox(msg, wxT("AboutMinimal"), wxOK | wxICON_INFORMATION, this);
}

void MyFrame::OnQuit(wxCommandEvent& event) {
	Close();
}

MyFrame::MyFrame(const wxString& title) : wxFrame(NULL, wxID_ANY, title) {
	wxMenu *fileMenu = new wxMenu;
	fileMenu->Append(wxID_EXIT, wxT("E&xit\tAlt-X"), wxT("Quit this program"));
	
	wxMenu *helpMenu = new wxMenu;
	helpMenu->Append(wxID_ABOUT, wxT("&About...\tF1"), wxT("Show about dialog"));
	
	wxMenuBar *menuBar = new wxMenuBar();
	menuBar->Append(fileMenu, wxT("&File"));
	menuBar->Append(helpMenu, wxT("&Help"));
	
	SetMenuBar(menuBar);
	
	CreateStatusBar(2);
	SetStatusText(wxT("Welcome to wxWidgets!"));
}

void MyFrame::DrawSimpleShapes() {
	wxClientDC dc(this);
	
	// Set line colour to black, fill colour to green
	dc.SetPen(wxPen(*wxBLACK, 2, wxSOLID));
	dc.SetBrush(wxBrush(*wxGREEN, wxSOLID));
	
	// Draw a point
	dc.DrawPoint(5, 5);
	wxMessageBox(wxT("Hi"), wxT("Hello"), wxICON_INFORMATION, this);
	// Draw a line
	dc.DrawLine(10, 10, 100, 100);
}

Рисуется в окне только то что стоит после wxMessageBox в посл. ф-ции. Что стоит перед ней не рисуется (т.е. точка). Если её убрать тогда вообще ничего не рисуется. Что происходит?


ыыы, а отрисовка бокса не стирает ли буфер? Попробуй накрыть другим окном и посмотрить изчезнет ли линия

visual ★★★
()
Ответ на: комментарий от visual

Это понятно. Но почему без wxMessageBox окно остаётся девственно чистым безо всякого накрывания другим окном.

psp13
() автор топика

используй wxPaintDC + wxPaintEvent

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.