嘘~ 小破站正在拼命加载中 . . .

【PB案例学习笔记】-25制作一个带底图的MDI窗口


写在前面

这是PB案例学习笔记系列文章的第25篇,该系列文章适合具有一定PB基础的读者。

通过一个个由浅入深的编程实战案例学习,提高编程技巧,以保证小伙伴们能应付公司的各种开发需求。

文章中设计到的源码,小凡都上传到了gitee代码仓库https://gitee.com/xiezhr/pb-project-example.git

gitee代码仓库

需要源代码的小伙伴们可以自行下载查看,后续文章涉及到的案例代码也都会提交到这个仓库【**pb-project-example**】

如果对小伙伴有所帮助,希望能给一个小星星⭐支持一下小凡。

一、小目标

通过本案例我们将制作一个带有底图的MDI窗口。通过这个案例我们可以制作出带底图的窗口,使窗口更加美观

二、创作思路

一般来说,在MDI窗口中无法放入底图,但通过本案例,我们建立一个标准的窗口来加载图片,MDI窗口启动时,打开这个窗口,就如同在MDI窗口中加载图片一样。最终效果如下

图片mdi

三、创建程序基本框架

① 新建examplework工作区

② 新建exampleapp应用

③ 新建w_main窗口,将其Title设置为主窗口

由于文章篇幅原因,以上步骤不再赘述,如果忘记怎么操作的小伙伴可以翻一翻该系列第一篇文章

④ 新建w_pic窗口

将窗口的Visible属性设置成True,其他属性均为False WindowType属性设置为popup!,并在窗口中添加Picture

控件,将其命名为p_1,如下图所示

w_pic窗口

⑤ 新建w_sheet 窗口

将其Title属性设置成“子窗口”

w_sheet子窗口

⑥新建m_main菜单,如下图所示

m_main菜单

四、编写w_pic代码

① 在w_pic窗口中定义实例变量,代码如下

boolean    isFullScreen
integer      oldwidth,oldheight

在`w_pic`窗口中定义实例变量

② 在w_pic窗口中定义init函数init(string as_picture,boolean as isfullscreen) returns (none)代码如下

p_1.OriginalSize    = true
p_1.pictureName = as_picture

oldheight = p_1.height
oldwidth = p_1.width

p_1.originalSize = false

this.resize(this.width,this.height)

③ 在w_pic窗口的open事件中添加如下脚本

isfullscreen = true
oldheight = p_1.height
oldwidth = p_1.width

④ 在w_pic窗口中添的Resize事件中添加如下代码

p_1.setredraw(false)

if isFullScreen then
    p_1.x = 0
    p_1.y = 0
    p_1.resize(newwidth,newheight)
else
    p_1.resize(oldwidth,oldheight)
    
    integer ax,ay
    
    ax = (newwidth - oldwidth) / 2
    if ax < 0 then ax = 0
    ay = (newheight - oldheight) / 2
    if ay < 0 then ay = 0
    
    p_1.x = ax
    p_1.y = ay
end if

p_1.setredraw(true)

五、编写w_main窗口代码

① 在w_main窗口中添加实例变量

w_pic               mdipicture
string       mdiPictureName
boolean     mdiIsFullScreen

② 在w_main中定义如下函数

setpicture (string as_picture,boolean as_isfullscreen) returns (none),具体代码如下

mdipicturename = as_picture
mdiisfullscreen = as_isfullscreen

if isvalid(mdipicture) then 
    mdipicture.init(mdipicturename,mdiisfullscreen)
    mdipicture.resize(this.width,this.height)
end if

③ 在w_main窗口的Resize事件中添加如下代码

if isvalid(mdiPicture) = false then
    opensheet(mdipicture,this)
    mdipicture.init(mdipicturename,mdiisfullscreen)
    mdipicture.x = 0
    mdipicture.y = 0
end if
mdipicture.resize(newwidth,newheight)

六、编写m_main菜单代码

① 在m_main菜单的Open命令的Clicked事件中添加如下代码

w_sheet sheet
opensheet(sheet,parentwindow)

open菜单添加代码

② 在m_main 菜单的Exit命令的Clicked事件中添加如下代码

CLOSE(PARENTWINDOW)

exit添加如下代码

③ 在m_main 菜单的Layer命令的Clicked事件中添加如下代码

parentwindow.ArrangeSheets ( Layer!  )

④ 在m_main 菜单的Cascade命令的Clicked事件中添加如下代码

parentwindow.ArrangeSheets ( Cascade!   )

七、exampleapp应用Open添加如下代码

①开发界面左边的System Tree窗口中双击exampleapp应用,在其Open事件中输入如下代码

OPEN(w_main)
w_main.setpicture("back.bmp",true)

② 在根目录下准备back.bmp图片

根目录下准备图片

back.bmp图片

八、运行程序

经过上面一堆操作,代码编写后。来检验一下我们的劳动成果

图片mdi

本期内容到这儿就结束了, ★,°:.☆( ̄▽ ̄)/$:.°★ 。 希望对您有所帮助

我们下期再见 (●’◡’●) ヾ(•ω•`)o


文章作者: xiezhr
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 xiezhr !
评论
  目录