佚名通过本文主要向大家介绍了setwindowrgn,c setwindowrgn,ocx控件安装,ocx控件下载,ocx控件注册等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: 跪求答案:OCX控件,用SetWindowRgn创建圆形按钮
描述:
若用VS自带的ActiveX Control Test Container加载圆形按钮控件一切正常。
现建立对话框MFC工程加载圆形按钮控件,运行后首次按钮显示正常,鼠标响应也正常(在圆形区域和外部矩形框之间单击鼠标应无响应)。但在按钮上第一次单击之后SetWindowRgn函数就好像失去了作用,FillSolidRect函数会填充整个矩形框,在圆形区域和外部矩形框之间单击鼠标也会产生响应。
求问大神这是为什么?
解决方案1:
描述:
控件鼠标activexVisual StudioMFC
ActiveX控件做圆形按钮,在OnCreate中用SetWindowRgn函数产生圆形区域,保证鼠标单击只在圆形区域内得到响应(即在圆形区域和外部矩形框之间单击鼠标应无响应)。在OnDraw中用FillSolidRect函数(第一个参数是rcBounds)填充圆形区域。若用VS自带的ActiveX Control Test Container加载圆形按钮控件一切正常。
现建立对话框MFC工程加载圆形按钮控件,运行后首次按钮显示正常,鼠标响应也正常(在圆形区域和外部矩形框之间单击鼠标应无响应)。但在按钮上第一次单击之后SetWindowRgn函数就好像失去了作用,FillSolidRect函数会填充整个矩形框,在圆形区域和外部矩形框之间单击鼠标也会产生响应。
求问大神这是为什么?
解决方案1:
中间某处容器又对控件设置了大小和位置,导致重新设置成了矩形而不是RGN。你跟踪一下你的控件的IOleInPlaceObject::SetObjectRects 实现,在这个里面应该是默认调用了MoveWindow或者SetWindowPos之类的,重载这个方法,改成SetWindowRgn