关于窗体置顶问题
如题,我知道用SetWindowPos,HWND_TOPMOST 可以让窗体置顶,但是多个窗体好像不行,比如有两个窗体Form1和Form2,分别在Form_Load中用SetWindowPos设置顶层,然后开始Form1先显示,再显示Form2, 但是两个窗体可以互相覆盖,就是用鼠标点击其中一个都可以覆盖另外一个,编译后也一样,按道理Form1先置顶,然后Form2再置顶,那么Form1应该不可以覆盖Form2的,我想要实现Form1不能覆盖Form2这样的效果,就像在Form2的Load中Me.Show ,Form1这样的效果,不过有个窗体是我自己CreateWindowEx的,不能用xxx.Show ,OwnerForm,请问还有什么Api可以实现的吗?vb的xxx.Show,OwnerForm是怎么实现的? 求解,请有懂的人告诉一下,谢谢!
[最优解释]
其实很简单,你的思路根本错了。
只要用
SetParent将窗口设置为你CreateWindow的子窗口就行了。
[其他解释]
+ ws_overlappedwindow
createwindowex x,x,x,ws_overlappedwindow or ws_visible... owner.hwnd
no ws_child
sub owner_formload()
first line: createwindowex....
second line: setwindowpos owner.hwnd,-1....
[其他解释]
你需要你的form2在form1上面
那么就在把form2设置成form1的子窗体就好了
[其他解释]
'标准模块代码
Option Explicit
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
Public Const HWND_TOPMOST = -1
Public Const SWP_NOMOVE = &H2
Public Const SWP_NOSIZE = &H1
Public Const SWP_NOZORDER = &H8
Public Sub SetFormTopmost(TheForm As Form)
SetWindowPos TheForm.hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOZORDER + SWP_NOMOVE + SWP_NOSIZE
End Sub
'窗体代码
Option Explicit
Private Sub Command1_Click()
SetFormTopmost frmMain
End Sub