用MFC写了一个控件,给网页调用,他希望在调用的控件的时候,直接传参数给控件,比如:
  <object classid=clsid:47939248-71F5-465D-AB7D-DC02FAD838EB align="absbottom" id="MyPlayer" style="WIDTH: 528px; HEIGHT: 432px">
  <param name="ppp" value="2546">
 </object>ppp就是控件里的一个参数,如何在控件里添加这样一个参数?请详细点谢谢PS:我添加了一个属性,只有Get_ppp() 和Set_ppp(), 好像也得不到传进来的值。

解决方案 »

  1.   

    <object ID="myp"
     classid=clsid:47939248-71F5-465D-AB7D-DC02FAD838EB align="absbottom" id="MyPlayer" style="WIDTH: 528px; HEIGHT: 432px"> 
      <param name="ppp" value="2546"> 
    </object> myp.ppp = "ssss"
      

  2.   


    class CACtrl : public COleControl
    {
    DECLARE_DYNCREATE(CACtrl)// 构造函数
    public:
    CACtrl();// 重写
    public:
    virtual void OnDraw(CDC* pdc, const CRect& rcBounds, const CRect& rcInvalid);
    virtual void DoPropExchange(CPropExchange* pPX);
    virtual void OnResetState();// 实现
    protected:
    ~CACtrl();
    DECLARE_OLECREATE_EX(CACtrl)    // 类工厂和 guid
    DECLARE_OLETYPELIB(CACtrl)      // GetTypeInfo
    DECLARE_PROPPAGEIDS(CACtrl)     // 属性页 ID
    DECLARE_OLECTLTYPE(CACtrl) // 类型名称和杂项状态
    // 消息映射
    DECLARE_MESSAGE_MAP()// 调度映射
    DECLARE_DISPATCH_MAP()
    afx_msg void AboutBox();// 事件映射
    DECLARE_EVENT_MAP()
    // 调度和事件 ID
    public:
    enum {
    dispidSetIp = 7L, dispidSetPort = 6L, dispidStop = 4L, dispidPause = 3L, dispidPlay = 2L, dispidlon = 1L
    }; Form  m_MyDialog;
    protected:
    LONG lon(LONG a, LONG b);
    public:
    afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
    CWnd *pWnd;
    protected:
    void Play(void);
    void Pause(void);
    void Stop(void);
    //void SetIp(CHAR* ip);
    void SetPort(LONG port);
    LONG SetIp(LPCTSTR ip);
    };//////////////////////////////////////////////////////////////<html>
    <head>
    <script type="text/javascript" language="javascript"> 
    function lon()
    {
    alert(document.DialogControl.lon(1,2));
    }
    function Play()
    {
    document.DialogControl.Play();
    }
    function Pause()
    {
    document.DialogControl.Pause();
    }
    function Stop()
    {
    document.DialogControl.Stop();
    }
    function SetIp()
    {
    document.DialogControl.SetIp("192.168.0.144");
    }
    function SetPort()
    {
    document.DialogControl.SetPort(8080);
    }
    </script><title>DialogControl</title>
    </head>
    <body>
    <center>
      <OBJECT ID="DialogControl"  CLASSID="CLSID:7C18D3BB-D761-4B9C-AB52-3F73FE9CC227"
    HEIGHT=385 WIDTH=700  >
      </OBJECT>
    </center><center>
    <input type="button" id="lon" value="lon" onclick="lon();"/> 
    <input type="button" id="Play" value="Play" onclick="Play();"/> 
    <input type="button" id="Pause" value="Pause" onclick="Pause();"/> 
    <input type="button" id="Stop" value="Stop" onclick="Stop();"/> 
    <input type="button" id="SetIp" value="SetIp" onclick="SetIp()";/> 
    <input type="button" id="SetPort" value="SetPort" onclick="SetPort();"/> 
    </center>
    </body>
    </html>
    你传的 JS要和COM中的参数类型兼容才行 
    void SetPort(LONG port);
    LONG SetIp(LPCTSTR ip);我这里用的是
      

  3.   

      <object classid=clsid:47939248-71F5-465D-AB7D-DC02FAD838EB align="absbottom" id="MyPlayer" style="WIDTH: 528px; HEIGHT: 432px">
      <param name="ppp" value="2546">
    </object> 这是网站的 调用方式,我们约定了参数都是 字符串类型BSTR 
    关键问题是当网页 这一句存在时,<param name="ppp" value="2546"> 
    我不知道在控件里如何获得BSTR ppp ="2526" ?
      

  4.   

    ATL写的ActiveX要怎么取得网页里PARAM传入的值? 
    http://www.cnblogs.com/RIVERSPIRIT/articles/1334257.html
      

  5.   

    搞定了,很简单,在接口添加属性,然后在控件类中将属性持久化。
    // Cmfc1Ctrl::DoPropExchange - 持久性支持void Cmfc1Ctrl::DoPropExchange(CPropExchange* pPX)
    {
    ExchangeVersion(pPX, MAKELONG(_wVerMinor, _wVerMajor));
    COleControl::DoPropExchange(pPX); // TODO: 为每个持久的自定义属性调用 PX_ 函数。
    PX_String(pPX,_T("strRsIp"),m_strRsIp);
    PX_String(pPX,_T("strRsPort"),m_strRsPort);
    PX_String(pPX,_T("strCuID"),m_strCuID);
    PX_String(pPX,_T("strPwd"),m_strPwd);
    PX_String(pPX,_T("strAppID"),m_strAppID);
    PX_String(pPX,_T("strActivexType"),m_strActivexType);
    //PX_String(pPX,_T("strRsIp"),m_strRsIp);
    }