CDocument -> CChildFrame



  • Hallo,

    weiß einer von euch, wie man in einer MDI-Anwendung von einem Dokument auf das zugehörige CChildFrame kommt?

    Schonmal vielen Dank im Voraus 🙂
    Phobos



  • 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? 😞


Anmelden zum Antworten