在CMainFrame的OnCreate 中,直接调用ActiveX的Create函数,创建控件,
然后在需要的地方直接调用控件的方法(公有)即可.

解决方案 »

  1.   

    你说的我已做了,但关键的是:ActiveX控件的方法如何映射到CMainFrame中?? 
    ActiveX控件中有一些事件如何映射到CMainFrame,如我有一socket的控件,一有网罗消息他就要通知CMainFrame,完成相应的处理,我该怎做??
      

  2.   

    在MaimFram.h中添加如下代码,是手工进行的,:
             //{{AFX_MSG(CMainFrame)
        afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
    *******      afx_msg void OnSocketDataArrival (long bytesTotal);
            //}}AFX_MSG
     ****** DECLARE_EVENTSINK_MAP() 
    DECLARE_MESSAGE_MAP()
    在MainFrm.cpp中,添加
      **** // add eventsink map to hook events
    BEGIN_EVENTSINK_MAP(CMainFrame, CFrameWnd)
       ON_EVENT(CMainFrame, ID_GPSSocket, 0 /* OnDataArrival */,        
           OnSocketDataArrival,VTS_I4)
    END_EVENTSINK_MAP()
    *********
    然后手工添加CMainFrm::OnSocketDataArrival(long bytesTotal);即可.
    至于如何知道手工加入的代码参数如何设定,一个简单方法就是打开一个
    dialog based的新Project,在对话框中插入一个winsocket6.0控件,
    在该对话框上点右键,插入消息处理函数,objectID选该插入的控件,选
    希望响应的消息,添加处理函数,看看向导添加的代码.这些代码都从Tlb文件中
    获得的.
      

  3.   

    HELLO Tiangz 
    THANK YOU FOR YOUR ANSWER, BUT I STILL HAVE LITTLE CONFUSED. I dont understand the Macro (CMainFrame, ID_GPSSocket, 0 /* OnDataArrival */,        
          OnSocketDataArrival,VTS_I4)what does those Parameters mean, specially the second ID_GPSSocket, where does it from, and the third, why is it 0? 
    thanks thanks
      

  4.   

    ID_GPSSocket should be the ID of your winsock control ID, the one
    you use in the m_sockctrl.Create(....) function,  ID_GPSSocket is 
    the one I used in my project, you can use any symbol you like.
      0 /* OnDataArrival */,   is the index of event sink of winsock
    control, when the control was made , the index value was decided,
    the information stored in the relevant .tlb file.
    Flowwing are all the event sink of winsock,you can see index of each
    function:BEGIN_EVENTSINK_MAP(CSocketDlg, CDialog)
        //{{AFX_EVENTSINK_MAP(CSocketDlg)
    ON_EVENT(CSocketDlg, IDC_WINSOCK1, 5 /* Close */, OnCloseWinsock1, VTS_NONE)
    ON_EVENT(CSocketDlg, IDC_WINSOCK1, 0 /* DataArrival */, OnDataArrivalWinsock1, VTS_I4)
    ON_EVENT(CSocketDlg, IDC_WINSOCK1, 1 /* Connect */, OnConnectWinsock1, VTS_NONE)
    ON_EVENT(CSocketDlg, IDC_WINSOCK1, 2 /* ConnectionRequest */, OnConnectionRequestWinsock1, VTS_I4)
    ON_EVENT(CSocketDlg, IDC_WINSOCK1, 6 /* Error */, OnErrorWinsock1, VTS_I2 VTS_PBSTR VTS_I4 VTS_BSTR VTS_BSTR VTS_I4 VTS_PBOOL)
    ON_EVENT(CSocketDlg, IDC_WINSOCK1, 4 /* SendComplete */, OnSendCompleteWinsock1, VTS_NONE)
    ON_EVENT(CSocketDlg, IDC_WINSOCK1, 3 /* SendProgress */, OnSendProgressWinsock1, VTS_I4 VTS_I4)
    //}}AFX_EVENTSINK_MAP
    END_EVENTSINK_MAP() if these are useful to you, don't forget pay me scores.    
          
      

  5.   

    HELLO Tiangz it is very useful to me, thanks very much, i have some other question, i hope u can anwser me next time, thanks thanks thanks