我做过这个。给楼主一个思路,楼主按照这个自己实现看。除了你说的效果,你还要实现的是:a的父窗体最小化时,b也跟着一起最小化。(这个虽然不是必须,但按理讲应该是需要的)。 设a的父窗体为p,所有的处理都在p的WM_ACTIVATE消息中。 在b加载和卸载时,都通知p,并把b的hWnd储存在p的一模块级变量中。Case WM_ACTIVATE Select Case LowWord(wParam) Case WA_ACTIVE, WA_CLICKACTIVE If g_hWndDlgBox <> 0 Then Call SetWindowPos(g_hWndDlgBox, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE Or SWP_NOMOVE Or SWP_NOACTIVATE) Case WA_INACTIVE If g_hWndDlgBox <> 0 Then Call SetWindowPos(g_hWndDlgBox, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOSIZE Or SWP_NOMOVE Or SWP_NOACTIVATE) End Select If HighWord(wParam) <> 0 Then If g_hWndDlgBox <> 0 Then Call ShowWindow(g_hWndDlgBox, SW_HIDE) Else If g_hWndDlgBox <> 0 Then Call ShowWindow(g_hWndDlgBox, SW_SHOW) End If
呵呵
当a失去焦点unload b
设a的父窗体为p,所有的处理都在p的WM_ACTIVATE消息中。
在b加载和卸载时,都通知p,并把b的hWnd储存在p的一模块级变量中。Case WM_ACTIVATE
Select Case LowWord(wParam)
Case WA_ACTIVE, WA_CLICKACTIVE
If g_hWndDlgBox <> 0 Then Call SetWindowPos(g_hWndDlgBox, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE Or SWP_NOMOVE Or SWP_NOACTIVATE)
Case WA_INACTIVE
If g_hWndDlgBox <> 0 Then Call SetWindowPos(g_hWndDlgBox, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOSIZE Or SWP_NOMOVE Or SWP_NOACTIVATE)
End Select
If HighWord(wParam) <> 0 Then
If g_hWndDlgBox <> 0 Then Call ShowWindow(g_hWndDlgBox, SW_HIDE)
Else
If g_hWndDlgBox <> 0 Then Call ShowWindow(g_hWndDlgBox, SW_SHOW)
End If
B.show,A
或者
setwindowlong B.hwnd,GWL_HWNDPARENT,A.hwnd