프로그래밍/C/C++2007.05.17 18:06

 #include <stdio.h>
#include <tchar.h>

#include <iostream>
using namespace std;

#include <map>


enum EVENT_TYPE {
 EVENT_MOUSE_DOWN,
 EVENT_MOUSE_UP
};

typedef struct {
 int x, y;
} EventArgs;

typedef void (*fnpoint)(EventArgs);


class Button
{
public:
 void AddEvent(EVENT_TYPE eventType, fnpoint fn)
 {
  m_mapEvent[eventType] = fn;
 }

 void FireEvent(EVENT_TYPE eventType, EventArgs args)
 {
  m_mapEvent[eventType](args);
 }

 void Click()
 {
  EventArgs args;
  args.x = 0;
  args.y = 50;

  FireEvent(EVENT_MOUSE_DOWN, args);
 }

private:
 map<EVENT_TYPE, fnpoint> m_mapEvent;

};


void OnMouseDown(EventArgs args)
{
 printf("button clicked! (%d, %d)\n", args.x, args.y);
}

int _tmain(int argc, _TCHAR* argv[])
{
 Button button;

 button.AddEvent(EVENT_MOUSE_DOWN, OnMouseDown);

 button.Click();

 return 0;
}


저작자 표시
신고
Posted by 시난
프로그래밍/C/C++2007.05.17 17:20

 #include <stdio.h>
#include <tchar.h>

#include <iostream>
using namespace std;

#include <map>

enum EVENT_TYPE {
 EVENT_MOUSE_DOWN,
 EVENT_MOUSE_UP
};

//void (*pEventHandler[3])(void);
typedef void (*fnpoint)(void);

fnpoint g_eventListener;

void sayHello()
{
 printf("hello!\n");
}

void OnMouseDown()
{
 printf("OnMouseDown!\n");
}

void OnMouseUp()
{
 printf("OnMouseUp!\n");
}

map<EVENT_TYPE, fnpoint> eventMap;


void AddEventListener(EVENT_TYPE eventType, fnpoint e)
{
 g_eventListener = e;
}

void FireEvent(EVENT_TYPE eventType)
{
 switch (eventType) {
  case EVENT_MOUSE_DOWN:
   g_eventListener();
   break;
 }

}

void MouseDown()
{
 //g_eventListener();

 FireEvent(EVENT_MOUSE_DOWN);
}

 


int _tmain(int argc, _TCHAR* argv[])
{
/*
 void (*pFn)(void);
 pFn = sayHello;
 pFn();
*/

 //AddEventListener(EVENT_MOUSE_DOWN, OnMouseDown);
 //MouseDown();

 eventMap[EVENT_MOUSE_DOWN] = OnMouseDown;

 eventMap[EVENT_MOUSE_DOWN]();

 //pEventHandler[0] = OnMouseDown;
 //pEventHandler[1] = OnMouseUp;


 //pEventHandler[0]();
 //pEventHandler[1]();

 return 0;
}


저작자 표시
신고
Posted by 시난
프로그래밍/C/C++2007.05.17 16:36

안녕하세요, 시난입니다.
함수포인터를 간단히 알아봅시다. ^^;


 #include <stdio.h>

void sayHello(void)
{
     printf("hello!\n");
}

int _tmain(int argc, _TCHAR* argv[])
{
     void (*pFn)(void);    // 리턴 값이 void 고 인자값이 void 인 함수를 가리키는 포인터를 생성
     pFn = sayHello;       // sayHello 라는 함수를 pFn로 가리킨다
     pFn();                    // pFn은 sayHello를 가리키고 있으므로, pFn(); 으로 호출하면 동일하게 된다. 

     return 0;


리턴 값과, 인자 값은 가리킬 함수에 맞게 수정하면, 여러개의 인자도 가능!


저작자 표시
신고
Posted by 시난

티스토리 툴바