Witam,
obecnie uczę się biblioteki wxWidget z książki autorstwa Janusza Ganczarskiego oraz Mariusza Owczarka. Korzystam z Code::Block 16.01, kompilator gcc 4.9.2, wxWidget 2.8.12. Nie korzystam z IDE opisanego w tej książce, a preferuje projektowanie poprzez wprowadzanie kodu niż korzystanie z wxSmith'a. Problem napotkałem w czwartym rozdziale dokładnie przykład 4.2. gdzie mamy trzy kontrolki, może lepiej przedstawię to w formie kodu:
#include "wx/wxprec.h"
#ifndef WX_PRECOMP
#include "wx/wx.h"
#endif // WX_PRECOMP
class Aplik : public wxApp
{
public:
virtual bool OnInit();
};
class Window : public wxFrame
{
public:
wxPanel* WxPanel1;
wxButton* Przycisk1;
wxCheckBox* Wybor1;
wxTextCtrl* WxMemo1;
Window(const wxString& title, const wxPoint& pos, const wxSize& size,
long style = wxDEFAULT_FRAME_STYLE);
private:
DECLARE_EVENT_TABLE()
void OnClose(wxCloseEvent& event);
void CreateGUIControls();
void CheckBox_checked(wxCommandEvent& event);
void CheckBox_clear(wxCommandEvent& event);
void CheckBox1Click(wxCommandEvent& event);
};
IMPLEMENT_APP(Aplik);
BEGIN_EVENT_TABLE(Window, wxFrame)
END_EVENT_TABLE()
bool Aplik::OnInit()
{
Window* MainWindow = new Window(_T("Moj Program"), wxPoint(50, 50),
wxSize(400, 400),
wxCAPTION|wxSYSTEM_MENU|wxCLOSE_BOX);
MainWindow->Show(TRUE);
return TRUE;
}
Window::Window(const wxString& title, const wxPoint& pos, const wxSize& size,
long style) : wxFrame(NULL, -1, title, pos, size, style)
{
WxPanel1 = new wxPanel(this, 1, wxPoint(0,0), wxSize(300, 300));
WxPanel1->SetFont(wxFont(8, wxSWISS, wxNORMAL, wxNORMAL, false, wxT("Tahoma")));
Przycisk1 = new wxButton(WxPanel1, 2, wxT("Przycisk1"), wxPoint(10, 50),
wxSize(60,30), wxNO_BORDER);
Wybor1 = new wxCheckBox(WxPanel1, 3, wxT("Wybor1"), wxPoint(10, 80),
wxSize(140,20), 0, wxDefaultValidator, wxT("Wybor1"));
WxMemo1 = new wxTextCtrl(WxPanel1, 4, wxT(""), wxPoint(10, 100), wxSize(250, 100),
wxTE_MULTILINE, wxDefaultValidator, wxT("WxMemo1"));
WxMemo1->SetMaxLength(0);
WxMemo1->SetFocus();
WxMemo1->SetInsertionPointEnd();
WxMemo1->SetFont(wxFont(8, wxSWISS, wxNORMAL, wxNORMAL, false, wxT("Tahoma")));
CreateGUIControls();
}
void Window::CheckBox_checked(wxCommandEvent& event)
{
WxMemo1->AppendText(wxT("Obsluga zdarzen przycisku - pole zaznaczone\n"));
}
void Window::CheckBox_clear(wxCommandEvent& event)
{
WxMemo1->AppendText(wxT("Obsluga zdarzen przycisku - pole czyste\n"));
}
void Window::CheckBox1Click(wxCommandEvent& event)
{
if(Wybor1->GetValue() == true)
{
Disconnect(2);
Connect(2, wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(Window::CheckBox_checked));
}
if(Wybor1->GetValue() == false)
{
Disconnect(2);
Connect(2, wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(Window::CheckBox_clear));
}
}
void Window::CreateGUIControls()
{
Connect(2, wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(Window::CheckBox_clear));
}
Po zaznaczeniu pola checkbox powinien wyświetlić się inny tekst, natomiast ciągle wyświetla się ten sam, niezależnie od tego czy pole jest zaznaczone czy też nie. Próbowałem zrobić to inaczej czyli:
void Window::CreateGUIControls()
{
//Connect(2, wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(Window::CheckBox_clear));
if(Wybor1->GetValue() == true)
{
Disconnect(2);
Connect(2, wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(Window::CheckBox_checked));
}
if(Wybor1->GetValue() == false)
{
Disconnect(2);
Connect(2, wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(Window::CheckBox_clear));
}
}
W funkcję kontrolek włożyłem treść innej funkcji ale nadal nic. Problem tkwi w czymś innym i przyznam, że po dwóch dniach prób stoję w miejscu dlatego prosiłbym o radę lub rozwiązanie.