控件属性绑定问题 我自己做了一个控件,嵌入到网页中,我想在<object...><para ...></para></object>里面绑定属性,应该怎么做?我给控件定义了属性,我程序取那个值总是空值。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 <object id=DWebOffice style="left: 0px; width: 100%; top: 0px; height: 450px;" classid="clsid:05430EC0-69CA-437A-B1F9-4B78B8647BEA" viewastext codebase="http://10.70.38.10:9001/ActiveX/WebOffice.cab#version=1,0,0,3"><param name="_Version" value="65536"><param name="_ExtentX" value="6959"><param name="_ExtentY" value="2699"> xdljf(hunter) 你好,这样设置属性我是知道的,大概您没理解我的问题,我的问题是想设置<param name="name" value="2699"> 这么一个参数,在控件里面应该怎么写? Make yourself understood.///<param name="name" value="2699"> 这么一个参数,在控件里面应该怎么写?What do you mean?You want to set attributes in Activex control or in html page? 我的意思是,我想给控件设置一个属性,能够直接在<object></object>这个里面直接绑定的,我通过MFC classwizard添加的属性,我在<object></object>里面通过<para name=.... value=...>设置的值在我的程序里面获得的总是空值。 如果我通过 对象.属性名=...的方法,可以设置这个属性值,在程序里面也可以获得。 icelight原创用param标签初始化ActiveX控件 作者icelight一。为控件CYourObject建一个属性,例如nIcelightProp。要勾选put function。二。为属性添加映射:BEGIN_PROP_MAP( CYourObject ) PROP_ENTRY( "nIcelightProp", 7, CLSID_NULL )END_PROP_MAP()//PROP_ENTRY()第二个参数的值是是属性nIcelightProp的ID值,该值可在IDL文件中查到。三。为你的控件添加父类IPersistPropertyBagImplclass ATL_NO_VTABLE CYourObject : public IPersistPropertyBagImpl<CYourObject>四。为永久化添加映射:BEGIN_COM_MAP(CYourObject) COM_INTERFACE_ENTRY(IPersistPropertyBag)END_COM_MAP()五。用HTML测试一下:<body bgcolor=#EAF2FF onLoad="Launch()"><object CLASSID="clsid:D4829924-60E7-43B3-9EC6-AE1DDD3C4EC3" ID="zhong"><param name="nLocalPort" value=67></param></object><script>function Launch(){ alert(zhong.nIcelightProp);}</script> 更正:<body bgcolor=#EAF2FF onLoad="Launch()"><object CLASSID="clsid:D4829924-60E7-43B3-9EC6-AE1DDD3C4EC3" ID="zhong"><param name="nIcelightProp" value=67></param></object><script>function Launch(){ alert(zhong.nIcelightProp);}</script> 在msdn找到答案,添加属性 在“类视图”中,右击库节点下面的接口,并选择“添加”,然后选择“添加属性”。此操作将启动“添加属性向导”。 在“添加属性向导”中,选择“Set/Get 方法”单选按钮,键入属性名(例如 EditControlText),并选择 BSTR 作为属性类型。 单击“完成”。 向 ActiveX 控件类声明 CDataPathProperty 派生类的一个成员变量。 CMyDataPathProperty EditControlText;实现 Get/Set 方法。对 Get 返回字符串。对 Set 加载属性并调用 SetModifiedFlag。 BSTR CDataPathCtrl::GetDataPath() { CString strResult; strResult = EditControlText.GetPath(); return strResult.AllocSysString();}void CDataPathCtrl::SetDataPath(LPCTSTR lpszNewValue) { Load(lpszNewValue, EditControlText); SetModifiedFlag();}在 DoPropExchange 中,添加下行: PX_DataPath(pPX, _T("DataPath"), EditControlText);添加下行,重写 ResetData 以通知属性重新设置其控件: EditControlText.ResetData(); 360杀毒 看来要杀整个宇宙了.果然垃圾中的战斗机!VC6的同志们注意了! 请问怎样向DLL中传递结构体参数 16位图像读取? 没学过C++可以学VC++吗? @@@@@@@@@@@@@@模板类问题!很急!关注有分! 用SQLDMO删除数据库(给200分) vc6和win2k的兼容问题 vc++深入详解 源代码为何会编译通过 运行失败呢 如何在vc中调用第三方动态库的时候,使用vc的函数提示功能 GDI中如何让setpixel的效率提高? ????怎么样判断返回的记录集是否为空??????????? 关于邮件主题
<param name="_Version" value="65536">
<param name="_ExtentX" value="6959">
<param name="_ExtentY" value="2699">
你好,这样设置属性我是知道的,大概您没理解我的问题,我的问题是想设置
<param name="name" value="2699"> 这么一个参数,在控件里面应该怎么写?
You want to set attributes in Activex control or in html page?
BEGIN_PROP_MAP( CYourObject )
PROP_ENTRY( "nIcelightProp", 7, CLSID_NULL )
END_PROP_MAP()
//PROP_ENTRY()第二个参数的值是是属性nIcelightProp的ID值,该值可在IDL文件中查到。三。为你的控件添加父类IPersistPropertyBagImpl
class ATL_NO_VTABLE CYourObject :
public IPersistPropertyBagImpl<CYourObject>四。为永久化添加映射:
BEGIN_COM_MAP(CYourObject)
COM_INTERFACE_ENTRY(IPersistPropertyBag)
END_COM_MAP()五。用HTML测试一下:
<body bgcolor=#EAF2FF onLoad="Launch()">
<object CLASSID="clsid:D4829924-60E7-43B3-9EC6-AE1DDD3C4EC3" ID="zhong">
<param name="nLocalPort" value=67></param>
</object>
<script>
function Launch()
{
alert(zhong.nIcelightProp);
}
</script>
<body bgcolor=#EAF2FF onLoad="Launch()">
<object CLASSID="clsid:D4829924-60E7-43B3-9EC6-AE1DDD3C4EC3" ID="zhong">
<param name="nIcelightProp" value=67></param>
</object>
<script>
function Launch()
{
alert(zhong.nIcelightProp);
}
</script>
在“添加属性向导”中,选择“Set/Get 方法”单选按钮,键入属性名(例如 EditControlText),并选择 BSTR 作为属性类型。
单击“完成”。
向 ActiveX 控件类声明 CDataPathProperty 派生类的一个成员变量。
CMyDataPathProperty EditControlText;
实现 Get/Set 方法。对 Get 返回字符串。对 Set 加载属性并调用 SetModifiedFlag。
BSTR CDataPathCtrl::GetDataPath()
{
CString strResult;
strResult = EditControlText.GetPath();
return strResult.AllocSysString();
}
void CDataPathCtrl::SetDataPath(LPCTSTR lpszNewValue)
{
Load(lpszNewValue, EditControlText);
SetModifiedFlag();
}
在 DoPropExchange 中,添加下行:
PX_DataPath(pPX, _T("DataPath"), EditControlText);
添加下行,重写 ResetData 以通知属性重新设置其控件:
EditControlText.ResetData();