李本良网站:VB中对象随窗体而改变大小的方法总结

来源:百度文库 编辑:中财网 时间:2024/05/05 07:16:54
VB中对象随窗体而改变大小的方法总结L0ftFC      前些时在做VB的编程研究时,发现一个问题:针对某一窗体(FORM),若它在运行过程中人为改变其大小(即Resize),如何让该窗体内的对象也随之改变呢?于是对此鄙人做了一下的一个方法小总结,仅供参考,如有遗漏,请见谅,如有高见,请不吝惜赐教。      问题的核心是要等比缩放对象,所以关键应该在如何改变对象的大小上。而针对不同的对象,也有当然有其不同的方法,在此我暂将对象分为两类:1.固有对象;2.构造对象。      1.固有对象:      即VB本身提供的对象接口,它们是实体对象,且君有其固定的属性值,并且属性值只可修改而不能创造的这一类对象。例如:CommandButton , Textbox , Label,PictureBox 等。      针对固有对象的特性,很自然想到用类来进行对象放缩,一下是我的一个操作方案:      A.定义类(即比例尺):                  '定义一个类用于保存每个控件的放大比例Type MyControl                        mcTop       As Single                        mcLeft       As Single                        mcHeight    As Single                        mcWidth     As SingleEnd Type      定义这样一个类的目的,就是在窗体加载时记录下窗体内的对象和窗体初始时的比例尺。B.初始化类(获取比例尺):'用于在form_load时初始化控件与窗体的初始比例,用于以后原始比例放大Private Function InitMycont(Obj As Control, mcControl As MyControl)             mcControl.mcLeft = Obj.Left / Form1.ScaleWidth             mcControl.mcTop = Obj.Top / Form1.ScaleHeight             mcControl.mcWidth = Obj.Width / Form1.ScaleWidth             mcControl.mcHeight = Obj.Height / Form1.ScaleHeightEnd Function这样针对该类,我现在便有了一个初始化操作了。      C.按类的记录改变对象的属性(按比例尺缩放):'用于在form_resize时对控件进行比例放大Private Function ChangeMycont(Obj As Control, mcControl As MyControl)            Obj.Left = mcControl.mcLeft * Form1.ScaleWidth            Obj.Top = mcControl.mcTop * Form1.ScaleHeight            Obj.Width = mcControl.mcWidth * Form1.ScaleWidth            Obj.Height = mcControl.mcHeight * Form1.ScaleHeightEnd Function      经过以上三步后,我便有了一个完整的面向缩放对象的编程方式(包含类及其基本操作)了,但我们该如何使用这个类呢?没错,初始化一定是在窗体加载(Form_Load)时使用,而改变大小操作就放在窗体改变(Form_Resize)时操作啦!代码如下:'调用InitMycont()函数初始化放大比例Private Sub Form_Load()                   a = InitMycont(Command1, mcControl(1))                   b = InitMycont(Text1, mcControl(2))End Sub                     '调用changMycont()函数进行按比例的放大Private Sub Form_Resize()                   a = ChangeMycont(Command1, mcControl(1))                   b = ChangeMycont(Text1, mcControl(2))End Sub       以上便实现了固有对象的大小变化。      2.构造对象      即针对于VB中的图形编程而言的,特别是那些直接在窗体上所做的图形(因为倘若在PictureBox中做图,仍然属于固有对象的范畴)。对于固有对象,当窗体缩小以至于比固有对象还小时,固有对象仅仅是被遮盖了,当窗体放大后,对象仍然完整。但是对于图形等构造对象而言,即使窗体再放大,原来的图形一旦被遮盖,就无法像固有对象一样依旧完整了。      当然,凡事有弊必有利。既然图形本身是可重构的,为何不在窗体改变时重新构造原有的图形呢?      VB在做图形编程时,有两种方法:1.绝对坐标;2.自定义坐标。然而VB中的自定义坐标本身就是一个相对值集合,即无论窗体怎么变化,坐标的值是相对值,值是不变,那么我们在这样一个坐标下所做的图形本身就具有随窗体大小改变的能力。于是,我自创了如下方法:      A.根据需求建立自定义坐标:           e.g:        Scale (-1, 1)-(1, -1)             ‘建立了一个自定义坐标   注:VB默认的x轴正方向是向右没问题,但是y轴正方向是向下的,所以想定义一个标准笛卡尔坐标系(即直角坐标系,y轴正方向向上),起始点与终止点的y坐标正好反过来了。      B.利用图形工具(PSet,Circle,Line)作“持久图形”           e.g:       AutoRedraw = True                             Circle (x, y)               ‘画一个可持久的圆      注:这里“可持久”并非真的持久不变,只是将图形的AutoRedraw打开了。这样该图形在每一次被加载时都会重画一次,再加上自定义坐标的相对性,于是每改变一次,图形都会根据当前坐标再做一次图,图形就能够缩放了。不过这里的AutoRedraw 属性只针对一个图形,假若有两个图形同时产生,想要它们均可重画,必须对每个图形定义前加上“AutoRedraw = True”                 e.g:               AutoRedraw = True    Circle (50, 50), 30                '一个实心圆(持久图形)                                              AutoRedraw = False                                              Circle (70, 70), 10                '一个实心圆(临时图形) 
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/wcn1990/archive/2009/05/15/4189817.aspx
vb中调整窗体大小的方法 C#中,怎样能让窗体中的内容和GDI绘图的内容随窗体大小改变而缩放? 如何在窗体中控制FLASH控件的大小随着窗口的大小而改变代码 如何使用resize事件使文本框能随窗体大小的改变而移动啊? (vb)2. 利用滚动条去控制窗体的背景色随滚动条的值的改变而改变 vb6.0中不允许改变窗体大小 如何在VB.NET中使控件随窗口大小变化而改变 在VB.net如何建自适应改变窗体大小 请教一个关于VB问题:VB中窗体标题栏的文字颜色、字体能否改变? 请教一个关于VB问题:VB中窗体标题栏的文字颜色、字体能否改变? VB中如何用sendmessage来改变command的大小 C#中,如何设置使窗体大小不再改变? VB.NET中如何锁定窗体的大小。让最大化按钮点不了。 VB窗体之间的调用方法? 怎样让网页随显示器的大小而改变大小 VB,关于改变窗体图标 怎么使用Frontpage使网页中字的字大小随显示器分辨率的大小不一改变而改变 在VB中如何获得对窗体移动事件的处理的一个方法 VB中拖动窗体 在VB中,窗体和控件都是对象,,在编程时是不是要针对每个对象的每个事件编写事件过程?为什么? vb.net中在窗体上显示用什么方法? 求VB中改变窗口形状的方法 在Photoshop中,怎么改变里面一个图层的大小,而背景大小不变呢? ps中改变扫描照片大小而不改变像素和比例是怎么做到的?