您的位置:程序门 -> vb -> 基础类



怎样获得 mdi 窗口中的子窗口的叠放顺序


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


怎样获得 mdi 窗口中的子窗口的叠放顺序[已结贴,结贴人:woodman007]
发表于:2007-07-27 10:27:04 楼主
mdi   主窗口有很多子窗口,我想在主窗口的菜单栏中用一个下拉列表列出子窗口的叠放次序,比如:

窗口列表
            1   ----   子窗口1
            2   ----   子窗口2
            3   ----   子窗口3

表示“子窗口1”在最前,“子窗口2”在“子窗口1”的下面,“子窗口3”在“子窗口2”的下面。

mdi   窗口只有一个   activeform   属性表示活动窗口,没有其他属性表示窗口的叠放顺序。

我想到的一个方法是:   建立一个队列,每当一个子窗口打开、关闭、变成活动窗口时,分别在   form_load、form_unload、form_activate   事件中加入改变队列的代码。不过这种方法的代码量太大,维护起来很不方便,请问有没有其他方法?

发表于:2007-07-27 11:23:011楼 得分:0
直接在菜单设计中将   "窗口列表 "   菜单的   windowlist   属性勾上
发表于:2007-07-27 11:29:152楼 得分:0
试了试,不会,帮顶
发表于:2007-07-27 12:05:203楼 得分:100
这是按叠放次序的方法:
module   内
===================
private   declare   function   enumchildwindows   lib   "user32 "   (byval   hwndparent   as   long,   byval   lpenumfunc   as   long,   byval   lparam   as   long)   as   long
private   declare   function   getclassname   lib   "user32 "   alias   "getclassnamea "   (byval   hwnd   as   long,   byval   lpclassname   as   string,   byval   nmaxcount   as   long)   as   long

private   childforms   as   collection

private   function   windowclassname(byval   hwnd   as   long)   as   string
        dim   retval   as   long,   sclassname   as   string
        sclassname   =   space(256)
        retval   =   getclassname(hwnd,   sclassname,   256)
        windowclassname   =   left$(sclassname,   retval)
end   function

public   function   enumchildproc(byval   hwnd   as   long,   byval   lparam   as   long)   as   long
        dim   frm   as   form
       
        if   windowclassname(hwnd)   =   "thunderformdc "   then   '
                for   each   frm   in   forms
                        if   frm.hwnd   =   hwnd   then
                                childforms.add   frm
                        end   if
                next
        end   if
       
        enumchildproc   =   1
end   function

public   function   listchildforms(byval   mdimain   as   mdiform)   as   collection
        set   childforms   =   new   collection
        enumchildwindows   mdimain.hwnd,   addressof   enumchildproc,   byval   2&
        set   listchildforms   =   childforms
end   function

===================
主窗体内测试
===================
private   sub   mnuwindow_click()
        dim   childforms   as   collection
        dim   frm   as   form
        set   childforms   =   listchildforms(me)
        for   each   frm   in   childforms
                debug.print   frm.caption
        next
end   sub
发表于:2007-07-27 12:43:144楼 得分:0
tiger_zhao(vb老鸟)   正解
学习了,收藏


快速检索

最新资讯
热门点击