У меня есть проблема в программировании на С ++ ...... надеюсь, вы ее решите.
я занимаюсь программированием на wxwidget с c ++. в основном проблема заключается в том, что после создания объекта, когда я вызываю метод, который связывается с кнопкой, значение не может войти в этот метод. оно содержит мусорное значение.
У меня есть три файла:
1> main.h, main.cpp
2> frame.h, frame.cpp
3> widget.h, widget.cpp
мы формируем фрейм (окно) в классе фреймов и выполняем его в главном файле .... т.е. файл фреймов содержит код, связанный с фреймом, а основной класс содержит только код, с помощью которого выполняется класс фреймов.
Я должен добавить некоторые элементы (например, текстовое поле, статический текст, кнопку и календарь) на фрейм. Мы можем сделать это двумя способами: 1) написать код элементов в классе фрейма 2) написать код в другом файле и использовать в классе фрейма ..... 1-й пробег нормально, я должен сделать 2-й путь.
Итак, я исправил код всех элементов в файле wxwidget.cpp, содержащем класс calendar_control. Все элементы работают нормально, но связывание события с кнопкой не работает, когда мы связываем кнопку в классе фрейма, кнопка работает, но значение, содержащееся в методе события, имеет значение мусора ....... я посылаю код файла фрейма и файл виджета ....
//frame.cpp
#include "frame.h"
#include "widget.h"
frame :: frame()
:wxFrame(NULL,wxID_ANY,wxT(""), wxPoint(-1, -1), wxSize(400,400))
{
d_parent_panel = new wxPanel(this,-1);
cal = new calendar_control(d_parent_panel,25,25)
;
/*****if i connect here it work but have garbage value in there event method , if we not use here only last object i.e cal2 work not cal**/
//Connect(this->cal->d_id_date_on_calendar_popup_button,wxEVT_COMMAND_BUTTON_CLICKED,wxCommandEventHandler(calendar_control::d_on_date_calendar_popup_button_evt));
cal2 = new calendar_control(d_parent_panel,25,90);
//Connect(this->cal2->d_id_date_on_calendar_popup_button,wxEVT_COMMAND_BUTTON_CLICKED,wxCommandEventHandler(calendar_control::d_on_date_calendar_popup_button_evt));
};
//widget.cpp
#include "widget.h"
calendar_control :: calendar_control(wxPanel *parent_panel,int x,int y)
{
date_on_calendar_display_box = new wxTextCtrl(parent_panel,wxID_ANY,wxT(""),wxPoint(x,y+5),wxSize(120,25),wxTE_READONLY);
date_on_calendar_name_text = new wxStaticText(parent_panel,wxID_ANY,CALENDAR_FORMAT_TEXT ,wxPoint(x,y+40),wxDefaultSize);
date_on_calendar_popup_button = new wxBitmapButton(parent_panel,d_id_date_on_calendar_popup_button=wxNewId(),calendar_pop_up_bitmap,wxPoint(x+135,y),wxDefaultSize,wxNO_BORDER);
//Connect(d_id_date_on_calendar_popup_button,wxEVT_COMMAND_BUTTON_CLICKED,wxCommandEventHandler(calendar_control:: d_on_date_calendar_popup_button_evt));
mystring =wxString::Format(wxT("%i"),d_id_date_on_calendar_popup_button);
wxPuts(mystring);
}
/*
* *********************************************
* Event handling
* **********************************************
*/
void calendar_control::d_on_date_calendar_popup_button_evt(wxCommandEvent& event)
{
wxPuts(mystring);
//contain id of button , but using here it contain garbage value
but not in constructor
}