各位大侠,我最近在开发一个ActiveX控件,其作用主要是绘图,绘制相应的图形,然后在单文档里面自动生成,然后组合起来形成一个完成的大图形。现在开发的时候遇到这样一个问题。我控件做好后,生成都没问题,然后控件在窗口内拖动也对。但是我的滚动条一拉动,我的控件就会跟随滚动条走。
比如我在CRect(0,0,10,10)创建了控件,然后我向右拉动滚动条,这样我的控件就应该看不见了,但是我的控件还是在窗口的左上角位置。
PS:我在我的控件里面调用了OnSetExtent和OnSetObjectRects两个虚函数。代码如下:
BOOL CZCLINECtrl::OnSetExtent(LPSIZEL lpSizeL) 
{
// TODO: Add your specialized code here and/or call the base class
CSize sz(right-left,bottom-top);
CWnd *pwnd=CWnd::FromHandle(m_hWnd);
CClientDC dc(pwnd);   
dc.DPtoHIMETRIC(&sz);
lpSizeL->cx=sz.cx;   
lpSizeL->cy=sz.cy; 
return COleControl::OnSetExtent(lpSizeL);
}BOOL CZCLINECtrl::OnSetObjectRects(LPCRECT lpRectPos, LPCRECT lpRectClip) 
{
// TODO: Add your specialized code here and/or call the base class
CRect xrect(left,top,left+right,top+bottom);   
return COleControl::OnSetObjectRects(&xrect,&xrect); 
// return COleControl::OnSetObjectRects(lpRectPos, lpRectClip);
}
出现这种情况后,我查看top,left,bottom,right的值,结果一看还是0,0,10,10。问题:如何才能在窗口滚动条拖动后,本应在左上角(0,0,10,10)的控件“消失”,滚动条拉回来的时候又出现,就和在窗口内新建一个Button一样的效果。
小弟再次感谢各位大侠了。

解决方案 »

  1.   

    我也是这么想的,但是我的ActiveX控件怎么获取这个消息呢,就是控件获取窗口的消息。
      

  2.   

    你的父窗口响应WM_HSCROLL/WM_VSCROLL消息,然后通知你的ActiveX控件去调整自己的行为
      

  3.   

    是不是这意思,父类响应了消息,然后再调用控件的Method改变?这个方法我想到了,但是对于我的程序来说太夸张, 因为父类里面可能有上千个控件,这样一一修改黄花菜都凉了。能不能修改控件本身呢?这样比较靠谱一点。
      

  4.   

    你这个问题解决了吗?我也碰到类似的问题,能不能把解决方案发到[email protected],谢谢!