在VB中如何让MDI子窗体总在最前

PrivateDeclareFunctionSetWindowPosLib"user32"(ByValhwndAsLong,ByValhWndInsertAfterAsL... Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long

Private Const HWND_TOPMOST& = -1
' 将窗口置于列表顶部,并位于任何最顶部窗口的前面
Private Const SWP_NOSIZE& = &H1
' 保持窗口大小
Private Const SWP_NOMOVE& = &H2
' 保持窗口位置

Private Sub Form_Load()
SetWindowPos Me.hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE
' 将窗口设为总在最前
End Sub
这招对MDI子窗体总在最前不管用
展开
 我来答
nlswlc
2011-01-19 · TA获得超过2068个赞
知道小有建树答主
回答量:779
采纳率:100%
帮助的人:633万
展开全部
没有办法取消合并,但是可以考虑把两个窗体设为正常窗体,然后将父窗体调整为占满整个屏幕,并把窗口设为最前、窗体背景颜色设为灰色。这样有菜单的子窗口就在父窗口的范围内显示,就产生出 MDI 窗体的效果了。

如果这样做,还需要注意一个问题,那就是"父窗体"的某些事件没有影响到"子窗体",例如当"父窗体"最小化时,"子窗体"仍在屏幕上显示,下面的代码可以避免这种现象:

Private Sub MDIForm1_Resize()
'检测是否最小化
If Me.WindowState = vbMinimized Then
'隐藏子窗体
Form1.Hide
Else Then '父窗体最大化或正常化显示
'显示子窗体
Form1.Show
End If
End Sub
哎呦挺不错哈
2014-11-19 · 超过56用户采纳过TA的回答
知道答主
回答量:104
采纳率:0%
帮助的人:142万
展开全部
参考答案: 工欲善其事,必先利其器。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
fxd2bdu
2020-08-06 · 超过28用户采纳过TA的回答
知道答主
回答量:110
采纳率:80%
帮助的人:26.2万
展开全部
VB自带有zOrder,设个定时器定时调用,能起到保证在窗体里面置顶的效果。
可以试试在父窗体里面画一个PictureBox,相当于工具栏一般的效果,也算是置顶了。
可以试试SetParent Me.hWnd,Me.Parent.hWnd
(记得要抄来SetParent的声明。)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式