祖先窗口的设计:
目的:让窗口能居中、窗口及其中所有控件均能自由伸缩,而位置关系不变。
建祖先窗口名为:w_autosize
declare instance variables
integer ii_orgwidth,ii_orgheight
checkbox icbx_obj
radiobutton irb_obj
commandbutton icb_obj
datawindow idw_obj
dropdownlistbox iddlb_obj
dropdownpicturelistbox iddplb_obj
editmask iem_obj
groupbox igb_obj
hscrollbar ihsb_obj
line iln_obj
listbox ilb_obj
listview ilv_obj
multilineedit imle_obj
picture ip_obj
picturebutton ipb_obj
picturelistbox iplb_obj
singlelineedit isle_obj
tab it_obj
treeview itv_obj
userobject iuo_obj
vscrollbar ivsb_obj
graph igr_obj
olecontrol iole_obj
richtextedit irte_obj
statictext ist_obj
statichyperlink ishl_obj
integer v_li=1
integer v_lj=1
private:
struct_consize s_consize
函数:f_center() return integer
int li_screenheight,li_screenwidth,li_rc,li_x=1,li_y=1
environment lenv_obj
if isnull(this) or not isvalid(this) then return -1
if GetEnvironment(lenv_obj)=-1 then return -1
//屏幕高度与屏幕宽度(转换成PB格式)
li_screenheight=PixelsToUnits(lenv_obj.screenheight,ypixelstounits!)
li_screenwidth=PixelsToUnits(lenv_obj.screenwidth,xpixelstounits!)
if not (li_screenheight>0) or not (li_screenwidth>0) then return -1
if li_screenwidth>this.width then
li_x=(li_screenwidth/2) - (this.width/2)
end if
if li_screenheight>this.height then
li_y=(li_screenwidth/2)-(this.height/2)
end if
li_rc=this.move(li_x,li_y)
if li_rc<>1 then return -1
return 1
函数:uf_position(windowobject v_winobj,long ll_width,long ll_height) return integer
dragobject dragcontrol
line line_contr
oval oval_contr
rectangle rect_contr
roundrectangle roun_contr
tab l_tab
userobject luo_control
choose case v_winobj.typeof()
case commandbutton! , picturebutton! , checkbox! , radiobutton! , &
statictext! , statichyperlink! , picture! , &
picturehyperlink! , groupbox! , singlelineedit! , editmask! , &
multilineedit! , richtextedit! , hscrollbar! , vscrollbar! , &
htrackbar! , vtrackbar! , hprogressbar! , vprogressbar! ,&
dropdownlistbox! , dropdownpicturelistbox! , listbox! ,&
picturelistbox! , listview! , treeview! , datawindow! ,&
graph! , olecontrol!
dragcontrol=v_winobj
s_consize.s_conx[v_li]=dragcontrol.x/ll_width
s_consize.s_cony[v_li]=dragcontrol.y/ll_height
s_consize.s_conw[v_li]=dragcontrol.width/ll_width
s_consize.s_conh[v_li]=dragcontrol.height/ll_height
v_li=v_li+1
case line!
line_contr=v_winobj
s_consize.s_conx[v_li]=line_contr.beginx/ll_width
s_consize.s_cony[v_li]=line_contr.beginy/ll_height
s_consize.s_conw[v_li]=line_contr.endx/ll_width
s_consize.s_conh[v_li]=line_contr.endy/ll_height
v_li=v_li+1
case oval!
oval_contr=v_winobj
s_consize.s_conx[v_li]=oval_contr.x/ll_width
s_consize.s_cony[v_li]=oval_contr.y/ll_height
s_consize.s_conw[v_li]=oval_contr.width/ll_width
s_consize.s_conh[v_li]=oval_contr.height/ll_height
v_li=v_li+1
case rectangle!
rect_contr=v_winobj
s_consize.s_conx[v_li]=rect_contr.x/ll_width
s_consize.s_cony[v_li]=rect_contr.y/ll_height
s_consize.s_conw[v_li]=rect_contr.width/ll_width
s_consize.s_conh[v_li]=rect_contr.height/ll_height
v_li=v_li+1
case roundrectangle!
roun_contr=v_winobj
s_consize.s_conx[v_li]=roun_contr.x/ll_width
s_consize.s_cony[v_li]=roun_contr.y/ll_height
s_consize.s_conw[v_li]=roun_contr.width/ll_width
s_consize.s_conh[v_li]=roun_contr.height/ll_height
v_li=v_li+1
case tab!
l_tab=v_winobj
s_consize.s_conx[v_li]=l_tab.x/ll_width
s_consize.s_cony[v_li]=l_tab.y/ll_height
s_consize.s_conw[v_li]=l_tab.width/ll_width
s_consize.s_conh[v_li]=l_tab.height/ll_height
v_li=v_li+1
integer li_ti1 , li_ti2
for li_ti1 = 1 to upperbound(l_tab.control[])
for li_ti2 = 1 to upperbound( l_tab.control[li_ti1].control[] )
uf_position(l_tab.control[li_ti1].control[li_ti2],ll_width,ll_height)
next
next
case userobject!
luo_control=v_winobj
s_consize.s_conx[v_li]=luo_control.x/ll_width
s_consize.s_cony[v_li]=luo_control.y/ll_height
s_consize.s_conw[v_li]=luo_control.width/ll_width
s_consize.s_conh[v_li]=luo_control.height/ll_height
v_li=v_li+1
integer li_uconnum,li_ui
li_uconnum=upperbound(luo_control.control[])
for li_ui=1 to li_uconnum
uf_position(luo_control.control[li_ui],ll_width,ll_height)
next
end choose
return 0
函数:uf_resize(windowobject v_winobj,long ll_width,long ll_height) return integer
dragobject dragcontrol
line line_contr
oval oval_contr
rectangle rect_contr
roundrectangle roun_contr
tab l_tab
userobject luo_control
choose case v_winobj.typeof()
case commandbutton! , picturebutton! , checkbox! , radiobutton! , &
statictext! , statichyperlink! , picture! , &
picturehyperlink! , groupbox! , singlelineedit! , editmask! , &
multilineedit! , richtextedit! , hscrollbar! , vscrollbar! , &
htrackbar! , vtrackbar! , hprogressbar! , vprogressbar! ,&
dropdownlistbox! , dropdownpicturelistbox! , listbox! ,&
picturelistbox! , listview! , treeview! , datawindow! ,&
graph! , olecontrol!
dragcontrol=v_winobj
dragcontrol.move(s_consize.s_conx[v_lj]*ll_width,s_consize.s_cony[v_lj]*ll_height)
dragcontrol.resize(s_consize.s_conw[v_lj]*ll_width,s_consize.s_conh[v_lj]*ll_height)
v_lj=v_lj+1
case line!
line_contr=v_winobj
line_contr.beginx = s_consize.s_conx[v_lj]*ll_width
line_contr.beginy = s_consize.s_cony[v_lj]*ll_height
line_contr.endx = s_consize.s_conw[v_lj]*ll_width
line_contr.endy = s_consize.s_conh[v_lj]*ll_height
v_lj=v_lj+1
case oval!
oval_contr=v_winobj
oval_contr.x = s_consize.s_conx[v_lj]*ll_width
oval_contr.y = s_consize.s_cony[v_lj]*ll_height
oval_contr.width = s_consize.s_conw[v_lj]*ll_width
oval_contr.height = s_consize.s_conh[v_lj]*ll_height
v_lj=v_lj+1
case rectangle!
rect_contr=v_winobj
rect_contr.x = s_consize.s_conx[v_lj]*ll_width
rect_contr.y = s_consize.s_cony[v_lj]*ll_height
rect_contr.width = s_consize.s_conw[v_lj]*ll_width
rect_contr.height = s_consize.s_conh[v_lj]*ll_height
v_lj=v_lj+1
case roundrectangle!
roun_contr=v_winobj
roun_contr.x = s_consize.s_conx[v_lj]*ll_width
roun_contr.y = s_consize.s_cony[v_lj]*ll_height
roun_contr.width=s_consize.s_conw[v_lj]*ll_width
roun_contr.height = s_consize.s_conh[v_lj]*ll_height
v_lj=v_lj+1
case tab!
l_tab=v_winobj
l_tab.x = s_consize.s_conx[v_lj]*ll_width
l_tab.y = s_consize.s_cony[v_lj]*ll_height
l_tab.width = s_consize.s_conw[v_lj]*ll_width
l_tab.height = s_consize.s_conh[v_lj]*ll_height
v_lj=v_lj+1
integer li_ti1 , li_ti2
for li_ti1 = 1 to upperbound(l_tab.control[])
for li_ti2 = 1 to upperbound( l_tab.control[li_ti1].control[] )
uf_resize(l_tab.control[li_ti1].control[li_ti2],ll_width,ll_height)
next
next
case userobject!
luo_control=v_winobj
luo_control.x = s_consize.s_conx[v_lj]*ll_width
luo_control.y = s_consize.s_cony[v_lj]*ll_height
luo_control.width = s_consize.s_conw[v_lj]*ll_width
luo_control.height = s_consize.s_conh[v_lj]*ll_height
v_lj=v_lj+1
integer li_uconnum,li_ui
li_uconnum=upperbound(luo_control.control[])
for li_ui=1 to li_uconnum
uf_resize(luo_control.control[li_ui],ll_width,ll_height)
next
end choose
return 0
w_autosize open事件:
long ll_width,ll_height
integer li_i
f_center( )
ll_width = this.workspacewidth( )
ll_height = this.workspaceheight( )
for li_i=1 to upperbound(this.control[])
uf_position(this.control[li_i],ll_width,ll_height)
next
w_autosize resize事件:
integer li_i
this.setredraw(false)
for li_i=1 to upperbound(this.control[])
uf_resize(this.control[li_i],newwidth,newheight)
next
v_lj=1
this.setredraw(true)
posted on 2007-09-17 17:43
wlj768 阅读(445)
评论(0) 编辑 收藏 引用