//객체의 이벤트 처리

#include <iostream>

using namespace std;

 

enum { BTN_OK, BTN_CANCEL };          //R.java in Android

 

class Button {

private:

        struct OnClickListener;

        OnClickListener* listener;

 

        // 현재 버튼을 시작별하기 위하여 아이디를 설정

        int id;

 

public:

        Button(int i) : id(i) {}

 

        //버튼의 이벤트를 처리하는 모든 객체는 아래의 인터페이스를 구현해야 한다.

        struct OnClickListener {

               virtual ~OnClickListener() {}

               virtual void onClick(Button& btn) = 0;

        };

 

        int getId() { return id; };

        void setOnClickListener(OnClickListener* p) { listener=p; };

        void click() { listener->onClick(*this); }

};

 

class MainActivity : public Button::OnClickListener {

public:

        void onClick(Button& btn) {

               switch(btn.getId()) {

               case BTN_OK:           cout << "clicked ok button" << endl;  break;

               case BTN_CANCEL:       cout << "clicked cancel button" << endl;     break;

               }

        }

};

 

int main() {

        MainActivity activity;

        Button btnOK(BTN_OK);                 btnOK.setOnClickListener(&activity);

        Button btnCancel(BTN_CANCEL); btnCancel.setOnClickListener(&activity);

       

 

        getchar();

        btnOK.click();

 

        getchar();

        btnCancel.click();

}

// 인터페이스 기반의 이벤트 처리 메커니즘 : Java Swing, Android GUI, 타이젠(삼성)

Posted by No names
,