P
Hm, wie das geht hab ich jetzt rausgefunden, das allgemeine Problem bleibt aber bestehen:
Ich habe eine CDialogBar in der mehrere Tabs sind, bei einem Klick auf einen Tab soll das dazugehörige ChildFrame aktiviert werden (eben eine MDI-Anwendung, in der mit Tabs zwischen den Fenstern hergeschaltet wird). Das Problem: Wie kann ich so einen ChildFrame nun in den Vordergrund holen, damit er aktiv ist?
Mein Code:
void CMainFrame::OnSelchangeTab(NMHDR* pNMHDR, LRESULT* pResult)
{
// Aktuelles Item holen
TCITEM item;
item.mask = TCIF_PARAM;
m_wndTabBar.m_ctrlTab.GetItem(m_wndTabBar.m_ctrlTab.GetCurSel(), &item);
// Dokuemnt holen (wird in item.lParam gespeichert)
CMyDoc* pDoc = (CMyDoc*)item.lParam;
// Erste View holen (Das ganze Ding ist ein CSplitterWnd)
POSITION pos = pDoc->GetFirstViewPosition();
CMyView* pView = (CMyView*)pDoc->GetNextView(pos);
if(!pView) return;
// Das zugehörige ChildFrame kriegen
CSplitterWnd* pFrame = (CSplitterWnd*)pView->GetParent();
CChildFrame* pChildFrame = (CChildFrame*)pFrame->GetParent();
// Versuchen, aktiv zu machen:
pChildFrame->SetFocus(); // geht nicht
pChildFrame->SetActiveWindow(); // geht auch nicht
pChildFrame->SetForegroundWindow(); // geht auch nicht
pChildFrame->SetWindowPos(&CWnd::wndTopMost, 0, 0, 0, 0, SWP_SHOWWINDOW); // Auch dies geht nicht
*pResult = 0;
}
Wie kriege ich das Verdammte ChildFrame in den Vordergrund?