2014-11-03 3 views
0

저는 C++을 처음 사용하고 codelite를 처음 사용하고 wxCrafter를 처음 사용했습니다. 몇 가지 GUI 애플 리케이션을 구축하려하지만 C++의 객체 패스 스루에 대해 엉망입니다. 나는 몇 시간을 보냈고, 나는 그저 약간 이해했다. 먼저 wxFrame/wxDialog 사이에 변수를 전달하려면 해당 클래스의 인스턴스를 만들어야합니다. 사용자가 입력 한 값 frameB.cpp액세스 wxFrame (s) 및 wxDialog (s) globally

void frameB::connect(frameA *upper) { 
    //now I can access frameA via upper 
} 

뿐만보다 복잡한 경우 (예. 10 개 프레임)에 대한 frameA.cpp

void frameA::buttonAClicked() { 
    frameB * frameB1 = new frameB(NULL); 
    frameB1->connect(this); 
} 

프레임들 사이에서 공유 될 필요가있다. 부모님이 프레임/대화 상자를 처리하는 것이 더 좋습니다. 모든 클래스는 main.cpp에 의해 트리거 되었기 때문에 MainApp()가 좋은 아이디어라고 생각합니다. 그래서 이렇게하려고 :

MAIN.CPP : 모두 frameA.cpp 및 frameB.cpp에서

class MainApp : public wxApp { 
public: 
frameA * frameA1; 
frameB * frameB1 
//frameC, frameD, frameE etc. 
MainApp() {} 
virtual ~MainApp() {} 
virtual bool OnInit() { 
    frameA1 = new frameA(NULL); 
    frameB1 = new frameB(NULL); 
    frameA1->connect(this); 
    frameB1->connect(this); 

    SetTopWindow(frameA); 
    return GetTopWindow()->Show(); 
} 
}; 

:

frameA::connect(wxApp *par) { 
    this->parent = par; 
} 

가 지금은 parent를 통해 MainApp에 액세스 할 수있어, 그러나 두 개의 구성원 개체 (하나는 자체)가 없습니다. 내가 놓친 게 있니? 저는 C++을 처음 접했습니다. 그게 더 좋은 방법 (또는 공식적인 방법) 할 수 있습니까?

답변

0

wxWidgets 응용 프로그램에서 전역 데이터의 종류를 만드는 편리한 방법이 있습니다.

ApplicationData* pData = &wxGetApp().applicationData; 
// Set/read global data members here: 
// pData->... 

항목 : 마지막으로

#include "ApplicationData.h" 

class MainApp: public wxApp 
{ 
public: 
    ApplicationData applicationData; // or may it private with get/set functions 
    ... 
}; 

, 당신은 wxWidgets에 응용 프로그램의 모든 장소에서 applicationData에 액세스 할 수 있습니다

#pragma once // replace with #ifndef ... if not supported by your compiler 

class frameA; 
// place here required forward declarations 
// ... 

struct ApplicationData 
{ 
    frameA* frameA1; 
    // any other data you need 
}; 

이 응용 프로그램 클래스 H 파일이 파일을 포함합니다 : 파일 ApplicationData.h 만들기 : 및을 추가해야합니다.매크로가 제대로 작동합니다.

관련 문제