A.如何在自定义的控件中编码实现,只要控件一放到窗体上,这个控件的left=0,width=form1.ScaleWidth,top=0,这个控件不能被移动,有点象是 Picture1控件的Align属性那样。
B.当引用窗体大小改变时,能不能不在引用自定义控件的窗体中写代码,而能不能让自定义控件自动感知引用窗体大小在改变,来使自已(自定义控件)也随着改变大小。

解决方案 »

  1.   

    A.需要使用SetWindowLong截获控件的消息处理过程,在WM_MOVING消息里处理lParam,lParam是窗口将要移动的矩形,使用CopyMemory修改该矩形的值,使其Left和Top始终保持为0,这样就控件就不能被移动了。
    B.需要使用SetWindowLong截获窗口的消息处理过程,在窗口的WM_MOVE消息里处理控件大小的问题。
      

  2.   

    另外,B项也可以不使用消息截取,因为Form本身支持WM_SIZE消息,即Form_Resize,在这儿处理控件的高度和宽度就可以了;但如果非要在控件内部进行,那只能按我上面说的做了。
      

  3.   

    a不需要那么麻烦去setwindowlong吧
      

  4.   

    必须要用setwindowlong去处理的,因为usercontrol不处理wm_moving消息。
      

  5.   

    B的解决方当
    Private Sub UserControl_Resize()  UserControl.Size UserControl.Parent.ScaleWidth - 500, UserControl.ScaleHeight
    end sub
      

  6.   

    错了,你这响应的是UserControl的Resize,而不是Form的Resize,楼主要求是UserControl随着Form的大小进行调整。
      

  7.   

    UserControl 的 Alignable 设计为 True,在使用的窗体上设置该控件的 Align 属性就可以,根本不需要任何代码。
      

  8.   

    UserControl 的 Alignable 设计为 True,在使用的窗体上设置该控件的 Align 属性就可以,根本不需要任何代码。
    谢谢,这个我已经知道。
    我是意思是,不想在Form中写代码或者是去设置!
    因为我看到过一delphi的一个控件,只要它一放到delphi的窗体上,它自动就靠窗体的一边了,它的长度自动调整到与窗体一样宽。我想问VB是不是也能实现,如何能实现?就象是VB的StatusBar控件那样,或者能默认就给它设好Align属性=vbAlignBottom.
    谢谢!
      

  9.   

    Private Sub UserControl_InitProperties()
        Extender.Align = vbAlignTop
    End Sub
      

  10.   

    Private Sub UserControl_InitProperties()
        Extender.Align = vbAlignBottom
    End Sub