在本机上已经注册了某一个OCX控件,例如华表cell控件,然后在一个VC工程中的一个对话框中用Insert ActiveX Control加入一个CELL控件,然后通用的做法是在Project菜单中选择Add to project中的component and control中的注册过的控件,然后这个控件的头文件和源文件就加入到这个VC工程中了,然后在这个对话框类中包含这个控件头文件,再声明一个这个控件变量,最后这个控件就可以随便调用了。
但是有没有方法实现,不用导入控件的头文件和源文件,而直接用COM接口来实现对这个控件的控制呢?
不知道我说明白了没有,请各位高手指教,我得MSN:[email protected]

解决方案 »

  1.   

    这是我在atl复合控件中用的办法,不用导入控件的头文件和源文件,不过要import,其实原理一样用CAxWindow设个成员,然后把内部控件句柄attach给它
    然后调用它的QueryControl函数,就可以得到控件的接口
    通过该接口控制控件
      

  2.   

    class MMM
    {
    CAxWindow m_axwindow;
    CComPtr<IGrid> m_pgrid;
    };//IDC_GRID为STATIC //get grid interface
    try
    {
    m_axwindow.Attach( GetDlgItem(IDC_GRID) );
    TESTHR(hr=m_axwindow.CreateControl( L"grid的progid" ));
    TESTHR(hr=m_axwindow.QueryControl(IID_IGrid,(void **)&m_pgrid));
    }
    catch(_com_error &e)
    {
    _com_error_msg(_T("OninitDialog()"),_T(""));
    }
      

  3.   

    用CAxWindow设个成员,然后把内部控件句柄attach给它
    然后调用它的QueryControl函数,就可以得到控件的接口
    通过该接口控制控件
      

  4.   

    1、CComPtr<IGrid> m_pgrid;中的IGrid是什么呀?
    2、TESTHR(hr=m_axwindow.CreateControl( L"grid的progid" ));中的“grid的progid”是什么呀?
    3、现在在用Qt,请问Qt下如何处理ActiveX控件呀?不导入头文件。