我用MFC Active向导做一个时间显示控件,其中有两个属性,一是Left(控件左边与容器左边的距离)
和Top(控件上边与容器上边的距离)。
在控件类中OnDraw()函数调用如下函数
RECT rect;
GetRectInContainer(&rect);
m_nLeft = rect.left;
m_nTop = rect.top;
BoundPropertyChanged(dispidLeft);
BoundPropertyChanged(dispidTop);
但在测试程序中显示Left和Top属性值都是-858993460,不知道为什么,请高手指点!

解决方案 »

  1.   

    获得控件在容器中的相对位置是不是用GetRectInContainer()?
      

  2.   

    没判断GetRectInContainer的返回值?控件没激活的话rect不会被填充的。
      

  3.   

    所以最好在使用之前把rect初始化为{0,0,0,0}
      

  4.   

    OnDraw()
    ——最好先用IsWindow判断一下控件的句柄。
    如果需要再判断一下GetRectInContainer的返回值。
      

  5.   

    CRect rect;
    COleControl::GetClientRect(&rect);
      

  6.   

    比如说,我在对话框编辑器中加入该控件,这时控件也是没激活的?
    是不是程序运行起来后才是激活的?
    如果这样的话,Top和Left属性就失去意义了。
    我就想在对话框编辑器中编辑该控件时显示Top和Left属性
      

  7.   

    GetClientRect()得到的是控件客户区大小,不是我想要的
      

  8.   

    求电子书  ActiveX / OLE 技术手册     UNDERSTANDING ACTIVEX AND OLE
              ACTIVEX控制组件彻底研究    ACTIVEX CONTROL INSIDE OUT
      

  9.   

    还有一个问题是我想给控件添加一个枚举类型的属性,应该怎么做?
    下面应该有:
    http://community.csdn.net/Expert/topic/3789/3789751.xml?temp=.6613733