microsoft visual basic 的mdi窗口虽然可以通过窗口的picture属性设置窗口的背景图,使程序美化了不少。但是图片加载之后当窗口在不同的分辨率下,会出现缺口的现象,比如在800*600下设计的图片,到了1024*768下右边和下边就会出现一块空余(背景色露了出来,非常难看)。并且当窗口的大小被用户改变的时候,图片也会被载断,使原本设计的很漂亮的图片变的“惨不妨睹”;笔者在开发项目的过程中经过摸索,写出了跟 windows 的设置桌面背景比较类似的功能。好东西不敢独享,写出来与大家共同提高。
作者:崔占民
email:cuizm@163.com
2004.6.8
以下是程序代码:
option explicit
'mdi窗口代码
'/============================================================================\
'| 作者:崔占民 2003.6.21 |
'| email:cuizm@163.com |
'| 添加一个mdi主窗口,一个普通的窗口,设置为mdi的子窗口(mdichild属性设置为true) |
'| 添加一个模块,用于设置打开文件对话框的api函数及结构 |
'| 在mdi主窗口中加一个菜单,菜单名为背景,其下添加四项子菜单,分别为:选择背景图, |
'| 默认背景,拉伸与平铺,其代码如下所示 |
'| |
'\============================================================================/
private sub mdiform_load()
on error resume next
dim ls_tmp as string
'读取注册的设置,是拉伸还是平铺,然后设置菜单项
ls_tmp = getsetting("orientzixun", "background", "lashen")
if ls_tmp = "true" then
mnupull.checked = true
mnulay.checked = false
else
mnupull.checked = false
mnulay.checked = true
end if
end sub
private sub mdiform_resize()
on error resume next
frmback.setback
frmback.hide
end sub
'设置缺省图片
private sub mnudefault_click()
if msgbox("您确定要清除当前背景,而选用默认背景吗?", vbquestion + vbyesno) = vbno then exit sub
screen.mousepointer = 11
doevents
savesetting "orientzixun", "background", "pathvalue", ""
frmback.setback
frmback.hide
screen.mousepointer = 0
end sub
'平铺背景
private sub mnulay_click()
mnupull.checked = false
mnulay.checked = true
savesetting "orientzixun", "background", "lashen", "false"
frmback.setback
frmback.hide
end sub
'拉伸背景
private sub mnupull_click()
mnupull.checked = true
mnulay.checked = false
savesetting "orientzixun", "background", "lashen", "true"
frmback.setback
frmback.hide
end sub
'选择背景图片
private sub mnuselback_click()
on error goto errhandle
dim fname as string, sname as string, ofname as openfilename
ofname.lstructsize = len(ofname)
ofname.hwndowner = hwnd
ofname.hinstance = app.hinstance
ofname.lpstrfilter = "图片文件" & chr(0) & "*.bmp;*.jpg;*.jpeg;*.gif;*.ico"
ofname.lpstrfile = space(255) & chr(0)
ofname.nmaxfile = 256