最近学习控件方面的知识,一些东西,记下!
1:Property:ActiveX Control的属性:
相当C+类的成员变量,该属性可以供控件自己用,也可以让外部调用!
【类似于C+里面的public范畴,Property可以直接在控件属性列表里编辑,这样才能够体现出控件的优势,当然也可以通过函数方式去设置,但是没有直接在属性列表里编辑方便】
2:Method:ActiveX Control的方法:
相当C+类的成员函数,该方法可以供控件自己用,也可以让外部调用!
我们将控件的属性编辑后,希望直接可以再应用程序里运行,这样的话,需要稍微处理下!
在DoPropExchange(CPropExchange* pPX)里,添加数据交换,
eg:PX_Short(pPX,"port",m_port,5660);
PX_String(pPX,"ipAdress",m_ipAdress,"127.0.0.1");
PX_Short(pPX,"m_testVariant",m_testVariant,123);
其中,第2个参数和第3个参数,就是添加变量里面的外部名称和内部名称,第4个是默认参数。
然后,再在属性改变的函数 On..Changed里面,添加一句BoundPropertyChanged( DISPID dispid);
参数就是变量的ID号,在.h里面有的。
现在就写这么多,也只理解了这么多,还有属性页什么的,再看! 2011-04-01
参考http://blog.sina.com.cn/s/blog_72ad33b10100o79j.html
http://www.microsoft.com/msj/0996/activex0996.aspx
3:属性页,顾名思义,就是用来修改控件外观的(一般都是这么做的,当然也可以用来实现设置参数),今天看了下,其实属性页蛮简单的,
只是以前没有碰过,所以有点找不着北,哎,学电子出来的,果然没什么好脑子!
1)添加一个对话框,属性设置为child 和 none ,大小最好和默认的一样,至少不要大过默认的那个属性页尺寸;
2)添加类,基类是COlePropertyPage;
3)修改一些东东,必须的:
在UpdateRegistry里return AfxOleRegisterPropertyPageClass(AfxGetInstanceHandle(),
m_clsid, IDS_PPG_ADD)
修改最后一个参数ID(手动在string Table里添加),还有构造函数里也要修改下 COlePropertyPage(IDD, IDS_PPG_ADD_Capition【这2个可以一样,也可以区分开来,建议一样!】;
将属性页添加到COleControl,在cpp里引入头文件,然后在
BEGIN_PROPPAGEIDS(CVEDIOCtrl, 2)
PROPPAGEID(CVEDIOPropPage::guid)
PROPPAGEID(CAddPropertyPage::guid)
END_PROPPAGEIDS(CVEDIOCtrl) 里,修改属性页的总的个数,同时添加引入的属性页
4) 由于属性页继承自CDialog,所以可以在上面添加控件,然后在类向导里面,添加控件变量,注意,添加变量的时候,多了一个东东,
叫做Optional Property Name ,就是指属性名字(class ...: public COleControl里的添加变量的外部名称),添加
好后,系统会自动做映射的!
DDP_Text(pDX, IDC_EDT_IP, m_IP, _T("ipAdress") );
DDX_Text(pDX, IDC_EDT_IP, m_IP);
COleControl里的属性变量,必须要有,否则属性页里做关联无效的!
属性页就是用来放一些变量,然后添加控件变量(关联变量要和COleControl的外部变量名称进行匹配)