在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子窗体总在最前不管用 展开
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子窗体总在最前不管用 展开
3个回答
展开全部
没有办法取消合并,但是可以考虑把两个窗体设为正常窗体,然后将父窗体调整为占满整个屏幕,并把窗口设为最前、窗体背景颜色设为灰色。这样有菜单的子窗口就在父窗口的范围内显示,就产生出 MDI 窗体的效果了。
如果这样做,还需要注意一个问题,那就是"父窗体"的某些事件没有影响到"子窗体",例如当"父窗体"最小化时,"子窗体"仍在屏幕上显示,下面的代码可以避免这种现象:
Private Sub MDIForm1_Resize()
'检测是否最小化
If Me.WindowState = vbMinimized Then
'隐藏子窗体
Form1.Hide
Else Then '父窗体最大化或正常化显示
'显示子窗体
Form1.Show
End If
End Sub
如果这样做,还需要注意一个问题,那就是"父窗体"的某些事件没有影响到"子窗体",例如当"父窗体"最小化时,"子窗体"仍在屏幕上显示,下面的代码可以避免这种现象:
Private Sub MDIForm1_Resize()
'检测是否最小化
If Me.WindowState = vbMinimized Then
'隐藏子窗体
Form1.Hide
Else Then '父窗体最大化或正常化显示
'显示子窗体
Form1.Show
End If
End Sub
展开全部
参考答案: 工欲善其事,必先利其器。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
VB自带有zOrder,设个定时器定时调用,能起到保证在窗体里面置顶的效果。
可以试试在父窗体里面画一个PictureBox,相当于工具栏一般的效果,也算是置顶了。
可以试试SetParent Me.hWnd,Me.Parent.hWnd
(记得要抄来SetParent的声明。)
可以试试在父窗体里面画一个PictureBox,相当于工具栏一般的效果,也算是置顶了。
可以试试SetParent Me.hWnd,Me.Parent.hWnd
(记得要抄来SetParent的声明。)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询