有一个mdi子窗体a,以及另一非模式窗体b,当两个都存在时只要子窗体a获得焦点,窗体b一直显示在子窗体a上面.
setwindowpos只能将b显示在所有窗体上,这不符合要求,setparent则将b限制在a的窗体范围内也不适合.
请教高手指点一二

解决方案 »

  1.   

    你可以考虑使用TableDialog应该可以解决你的问题附着窗体之上的一个窗体,你可以隐藏或者显示它或者用它实现上一页,下一页也不错注意:tab之间切换偶尔显示会有上一个tab的痕迹,过一会儿就自动消失了
     呵呵
      

  2.   

    当a获得焦点,b.show ,mdiform
    当a失去焦点unload b
      

  3.   

    我做过这个。给楼主一个思路,楼主按照这个自己实现看。除了你说的效果,你还要实现的是: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
      

  4.   

    MDI的子窗体我没尝试过,但是如果想让窗体A一直处于窗体B的上面,B最小化A也跟着最小化有两个方法:
    B.show,A
    或者
    setwindowlong B.hwnd,GWL_HWNDPARENT,A.hwnd
      

  5.   

    对话框改为窗体,FormStyle==fsStayOnTop 应该可以吧/