Come fare una finestra figlio MDI rimanere in cima dei suoi fratelli?
-
09-09-2019 - |
Domanda
Questa domanda è legata a il mio precedente.
Ho un MFC (VC6) Applicazione MDI, che ha diverse finestre figlio MDI agire come viste diverse per uno stesso documento.
È possibile impostare uno di questi telai per stare sopra gli altri?
Ho provato a chiamare
SetWindowPos(
&GetParentFrame()->wndTopMost,
0, 0, 0, 0,
SWP_NOMOVE | SWP_NOSIZE);
e
ModifyStyleEx(0, WS_EX_TOPMOST);
dal CMDIChildWnd ma nessuno sembra funzionare.
Soluzione
Nella tua classe CMDIChildWnd (di solito CChildFrame), aggiungere statico HWND m_hTopWnd
.Impostare uguale a l'HWND del bambino che si desidera essere sempre al top.
Maniglia WM_WINDOWPOSCHANGED
in CChildFrame
.Il gestore, se la corrente è m_hWnd == m_hTopWnd
.Se non, chiamare
::SetWindowPos(m_hTopWnd, HWND_TOP, 0, 0, 0, 0,
SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOSIZE);
In questo modo ogni volta che la posizione di un qualsiasi finestra figlio MDI è impostato, il "sempre in primo piano la finestra" essere spinto verso l'alto.
Anche il manico WM_CLOSE
e quando la finestra superiore di chiusura, set m_hTopWnd = NULL.
Vedere anche: CodeProject articolo e MSDN knowledgebase
Altri suggerimenti
Sei sicuro che sia una buona progettazione dell'interfaccia utente di tenere una finestra secondaria in cima alle altre? Se questo non dovesse diventare un telaio separato più alto? O una barra di controllo?