我写了个ActiveX控件,定义了一个BOOL型的属性InitToday(是否初始就显示今天的日期),我在界面设计器里给它设成了TRUE,可在控件的OnCreate函数里得到的这个属性值是个负数(未初始化的整型数据),我没办法用它来做初始化工作。为什么库存属性Text,Caption等在设计器里给它们赋值后就可以在OnCreate里得到正确的值呢?

解决方案 »

  1.   

    你对那个属性的Set实现了吗?你是不是光实现了Get。
      

  2.   

    楼主的问题涉及到设计器设定值保存的情况。具体的在孙鑫老师的VC教程中说的很详细了。你可以去看看
    我给你找了一个网址:http://www.znccw.com/Article/pc/biancheng/200703/4438.html,从第160集开始是控件部分,在后面
    有说到一些很细节设置问题。
      

  3.   

    需要在DoPropExchange 中加入属性的保存 
    比如要保存背景颜色属性
    void XXXXCtrl::DoPropExchange(CPropExchange* pPX)
    {
      ExchangeVersion(pPX, MAKELONG(_wVerMinor, _wVerMajor));
      COleControl::DoPropExchange(pPX);  // TODO: Call PX_ functions for each persistent custom property.
      PX_Color(pPX, "m_backColor", m_backColor, RGB(255,0,0)); //}详看MSDN DoPropExchange 和 PX_
      

  4.   

    1、你的InitToday属性根本就不是库存属性,所以无法永久保存
    2、你的实现类中该属性对应的变量没有被初始化
      

  5.   

    把你的内部变量定义为VARIANT_BOOL 类型,然后
    void XXXXCtrl::DoPropExchange(CPropExchange* pPX) 

      ExchangeVersion(pPX, MAKELONG(_wVerMinor, _wVerMajor)); 
      COleControl::DoPropExchange(pPX);   // TODO: Call PX_ functions for each persistent custom property. 
      PX_Short(pPX,"InitToday",m_bInitToday);
    就可以了。