用vc开发基于mfc的activex控件时,怎么样再使用一个别的activex控件,比如mscomm控件

解决方案 »

  1.   

    add ATL support to your MFC project
    http://www.codeguru.com/atl/mfcatl.shtml
    then you create mscomm control by ATL, refer to the following technic of creating mswinsck.ocx control
    #import "c:\winnt\system32\mswinsck.ocx" no_namespace
    ...
    IMSWinsockControlPtr pWinsock;
    _bstr_t pstr("mswinsock.winsock");
    CLSID clsidwinsock;
    CLSIDFromProgID(pstr,&clsidwinsock);
    pWinsock.CreateInstance(clsidwinsock);
    if(pWinsock)
    {
    pWinsock->RemotePort=13;
    pWinsock->RemoteHost=_bstr_t("time-a.nist.gov");
    _variant_t varoptional((long)DISP_E_PARAMNOTFOUND,VT_ERROR);
    HRESULT hr= pWinsock->Connect();
    if(FAILED(hr))
    MessageBox(NULL,"failed","failed",MB_OK);
    ......pWinsock->Close();
    }
    else
    MessageBox(NULL,"can not create winsock","error",MB_OK); 
      

  2.   

    我说说我的问题
    我使用一个gis功能的activex,我要做一个空间聚类,要用那个activex的一些东西,我想把这个聚类的东西也作为一个activex发布,不管包含还是聚合都可以了,我在我的那个activex中创建那个gis控件时总是非法操作,看了看是好像是容器的问题,也不清楚了
      

  3.   

    我的问题解决了,我没有把它作为容器,在InitInstance()中加一句:AfxEnableControlContainer();就可以了
    你那个问题看看能不能解决
      

  4.   

    我对atl不熟悉,况且,就算按照com的方法来创建了comm控件,可怎么来响应它的数据到达事件呢?上边哥们说,加Afx...Container()就解决了,能详细说说是如何做的吗?
      

  5.   

    我找到方法了,在控件的InitInstance()中调用AfxEnableControlContainer();可以象平常的对话框一样把activex控件加进工程,在控件类中添加一个该类型的变量,可以用CreateControl (
                                strControlProgid,
                                "",
                                WS_VISIBLE, 
                                rc,
                                this,
                                IDC_MSCOMM1,
                                NULL,
                                FALSE,
                                NULL);
    来创建activex控件,其中strControlProgid为该控件的Progid,要处理该控件的消息,象在对话框中一样,在头文件中添加DECLARE_EVENTSINK_MAP()宏定义,在实现文件中添加
    BEGIN_EVENTSINK_MAP(CMASCCtrl, COleControl)
        //{{AFX_EVENTSINK_MAP(CMascdriverDlg)
    ON_EVENT(CMASCCtrl, IDC_MSCOMM1, 1 /* OnComm */, OnComm, VTS_NONE)
    //}}AFX_EVENTSINK_MAP
    END_EVENTSINK_MAP()
    即可,OnComm即是你的消息处理函数。