Обработчики OnSize или OnItemSelected вызываются без проблем. Хочу сделать Что-то типа wxCheckListBox, только вместо "чекрыжиков" будут цветные квадратики. Как правильно делать? Или может у кого уже есть готовый образец, по типу того который мне нужен?
По типу как вот здесь: Корд прост, наследуюсь от wxListBox и переопределяю событие рисования:
Code: Select all
#include "wx/wx.h"
//#include "wx/sizer.h"
//#include <wx/listbox.h>
const int ID_LISTBOX = 1;
class wxColorCheckListBox : public wxListBox
{
public:
wxColorCheckListBox(wxWindow *parent, int id );
void OnPaint(wxPaintEvent& event);
void OnSize(wxSizeEvent& event);
void OnMouseDown(wxMouseEvent& event);
void OnItemSelected(wxCommandEvent & event);
DECLARE_EVENT_TABLE()
};
BEGIN_EVENT_TABLE(wxColorCheckListBox, wxListBox)
EVT_LEFT_DOWN(wxColorCheckListBox::OnMouseDown)
EVT_LISTBOX(ID_LISTBOX, wxColorCheckListBox::OnItemSelected)
EVT_PAINT(wxColorCheckListBox::OnPaint)
END_EVENT_TABLE()
wxColorCheckListBox::wxColorCheckListBox(wxWindow *parent, int id )
:wxListBox(parent, id, wxDefaultPosition, wxDefaultSize, 0, NULL, wxLB_OWNERDRAW, wxDefaultValidator, wxT("color_check_listbox"))
{
//Connect(ID_LISTBOX, wxEVT_PAINT, wxPaintEventHandler (wxColorCheckListBox::OnPaint));
}
void wxColorCheckListBox::OnMouseDown(wxMouseEvent & event)
{
std::cout << "mouse down!!!\n";
Update();
event.Skip();
}
void wxColorCheckListBox::OnPaint(wxPaintEvent & event)
{
std::cout << "draw!!!\n";
wxClientDC dc(this);
dc.SetBrush(*wxWHITE_BRUSH);
dc.SetPen (*wxRED_PEN);
dc.Clear();
int size = 20;
for (unsigned int x = 0; x < 3; x++)
{
dc.SetFont(*wxNORMAL_FONT);
dc.SetBrush(wxBrush(wxColor(*wxLIGHT_GREY)));
dc.SetPen(wxPen(wxColor(*wxBLACK)));
dc.DrawRectangle (size + 2, x*size, size, size);
dc.DrawText (wxT("aaaa"), (size + 2)*2, x*size);
}
}
void wxColorCheckListBox::OnSize(wxSizeEvent& event)
{
std::cout << "size!!!\n";
//event.Skip();
}
void wxColorCheckListBox::OnItemSelected(wxCommandEvent & event)
{
std::cout << "mouse selected!!!\n";
}
/////////////////////////////////////////////////////////////////////////////////
class MyApp: public wxApp
{
bool OnInit();
public:
};
IMPLEMENT_APP(MyApp)
bool MyApp::OnInit()
{
wxDialog * dlg = new wxDialog(NULL, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize(300,500));
wxColorCheckListBox * lb = new wxColorCheckListBox(dlg, ID_LISTBOX);
lb->Append(wxT("Item 1"));
lb->Append(wxT("Item 2"));
lb->Append(wxT("Item 3"));
wxBoxSizer sizer(wxHORIZONTAL);
sizer.Add(lb, 1, wxEXPAND|wxALL, 5);
dlg->SetSizer(&sizer);
dlg->Show();
return true;
}