2015-01-16 2 views
0

헤더에서 기능에 연결 : 내가 가지고 클래스를 testfunction하고 내가 내 메인 창에 Textcontrol를 만들 수있는 클래스를 원하는 패널wxWidgets에 멤버 클래스

class testsubclass{ 
     public: 
     testsubclass(); 
     void testfunc(wxCommandEvent &event); 
}; 

class panelonwindow : public wxPanel{ 
     public: 
     panelonwindow(wxWindow *windowid, int ID); 
     wxWindow *mywindow, *mypanel; 
     wxTextCtrl *mytextcontrol; 

     void maketextctrl(std::string label, int &id); 
} 

와 함께.

wxWindow *mainwindow; 
testsubclass *mysubclass; 
panelonwindow *testpanel; 
int ID1 = 100; 
int ID2 = 101; 

지금의 주요 기능은 다음과 같습니다 :

헤더 :

mainwindow = this; 
std::string textcontrolstring = "this is a test"; 
testpanel = new panelonwindow(mainwindow, ID); 
testpanel->maketextctrl(textcontrolstring, ID2); 

mysubclass = new testsubclass(); 
기능으로 나는

testsubclass::testsubclass(){ 
} 

panelonwindow::panelonwindow(wxWindow *windowid, int ID) 
    :wxPanel(windowid, ID, wxDefaultPosition, wxSize(150, 150)){ 
     mywindow = windowid; 
     mypanel = this; 
}; 

void panelonwindow::maketextctrl(std::string label, int &id){ 
    wxString newlabel(label.c_str(), wxConvUTF8); 
    mytextcontrol = new wxTextCtrl(mypanel, id, newlabel, wxDefaultPosition, wxSize(130, 30)); 
} 


void testsubclass::testfunc(wxCommandEvent &event){ 
    printf("%s\n", "testfunc was called"); 
} 

내 메인 창 헤더 파일 포인터에 두 가지 클래스가 포함되어 사용

문제는 testsublass 함수 testfunc를 다음과 같은 이벤트에 연결할 수 없다는 것입니다.

Connect(ID2, wxEVT_COMMAND_TEXT_UPDATED, 
    wxCommandEventHandler(mysubclass->testfunc)); 

내가 panelonwindow 기능의 다른 회원에게 보이드 panelonwindow 내 :: maketextctrl에서 이벤트에 링크 할 수 있습니다 (제공 I : 나는 이런 식으로 뭔가를 할 때 메인 윈도우 기능, 나는 몇 가지 비밀 컴파일러 메시지를 얻을 무효 panelonwindow :: testfunc 같은 방식으로 그들을 선언 (wxCommandEvent & 이벤트)

void panelonwindow::maketextctrl(std::string label, int &id){ 
    wxString newlabel(label.c_str(), wxConvUTF8); 
    mytextcontrol = new wxTextCtrl(mypanel, id, newlabel, wxDefaultPosition, wxSize(130, 30)); 

Connect(id, wxEVT_COMMAND_TEXT_UPDATED, 
    CommandEventHandler(panelonwindow::testfunc)) 
} 

내가 패널의 버튼을 많이 만들 계획 때문에, 내가 멤버 클래스에서 함수를 정의 선호보다는 함수를 작성합니다 모든 윈도우를 제어하는 ​​각 버튼/텍스트 제어 윈도우를 분리합니다.

그것은 안돼서 질문의 비트 수 있습니다,하지만 난 도움이 모든 종류의 감사하겠습니다

당신은 이벤트를 생성하는 객체에 Connect()를 호출하는 방법과 다른 wxWidgets에는 것입니다 (그것을 처리하는 그것을 객체를 전달해야

답변

1

이벤트를 보낼 개체를 파악할 수 있습니까? 코드를 읽어서 찾을 수없는 경우). 그래서 testsubclass::testfunc()에 evnet을 처리하기 위해 당신은

Connect(id, wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler(testsubclass::testfunc), NULL, mysubclass); 

를 호출해야하지만 당신은 여전히 ​​당신이 원하는 어떻게/어떤 객체의 필요성에 Connect() 전화를 결정해야합니다.

당신이 (당신이해야) wxWidgets에 3을 사용하는 경우, 짧은 이벤트 유형 이름과 좀 더 명확하고 짧은 것에 따라 Bind() 더 현대적인 사용을 고려 : 대부분을 고정

Bind(wxEVT_TEXT, &testsubclass::testfunc, mysubclass, id); 
0

. 그러나, 부분

Connect(id, wxEVT_COMMAND_TEXT_UPDATED, CommandEventHandler(testsubclass::testfunc), NULL, mysubclass); 

여전히 작동하지 않았다. 나는 그것을 대신했다.

Connect(id, wxEVT_COMMAND_TEXT_UPDATED, 
(wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) &testsubclass::testfunc, 
NULL, mysubclass) 

로 고정시켰다.