秀纳

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 :: 管理 ::
class ClassA;

typedef DWORD (
/*CALLBACK*/ ClassA::*lpGetFunctionAddr)(LPCTSTR);


class ClassA
{
public:
    ClassA()
{}
    
virtual ~ClassA(){}
    DWORD MsgBox(LPCTSTR Text)
    
{
        MessageBoxA(NULL,Text,
"ClassA::MsgBox Called!",0);

        
return (DWORD)MessageBoxA;
    }

}
;


class ClassB
{
private:
    ClassA 
* m_pObjectA;
    lpGetFunctionAddr m_FuncPtr;
public:
    ClassB() : m_pObjectA(NULL),m_FuncPtr(NULL)
{}
    
virtual ~ClassB(){}

    
void SetDo(ClassA * pObjA,lpGetFunctionAddr FuncPtr)
    
{
        m_pObjectA 
= pObjA;
        m_FuncPtr 
= FuncPtr;
    }

    
    
void DoIt()
    
{
        
if(m_pObjectA && m_FuncPtr)
        
{
            DWORD dwRet 
= (m_pObjectA->*m_FuncPtr)(TEXT("ClassB::DoIt()"));
            ((
int (WINAPI*)(HWND,LPCSTR ,LPCSTR,UINT))dwRet)(NULL,"ClassB::DoIt() Over!","ClassB",0);
        }

    }

}
;

int main(int argc, char* argv[])
{
    ClassA 
* pObjectA = new ClassA();
    ClassB 
* pObjectB = new ClassB();
    pObjectB
->SetDo(pObjectA,&ClassA::MsgBox);

    pObjectB
->DoIt();

    delete[] pObjectB;
    delete[] pObjectA;

    
    
return 0;
}
posted on 2008-07-14 20:47  秀纳  阅读(224)  评论(0)    收藏  举报