Reziable Dialog mit CTab



  • Hi

    Ich habe die Reziable Libary von CodeProject ausprobiert.

    Ich habe allerdings in meinem Dialog ein Tab Control. Das TabControl selbst ändert die Grösse beim Grösse des Dialogs ändern.

    Der 2te Dialog der im Tab Control ändert jedoch nicht die Grösse. Ich habe CReziablePage ohne Erfolg ausprobiert. Auch mit CReziable Dialog erhalte ich nur ein vom Hauptdialog unabhängiges Grösse ändern. Ich hab auch versucht alle Controls direkt im Hauptdialog zu Adden.

    Es soll ein CListCtrl und der Dialog drumrum rezist werden. Und dieser Dialog ist in einem Tab Control.

    Also wenn jemand sowas schonmal gemacht hat bzw eine bessere Reziable Libary kennt. Dann bitte antwortet.



  • ach kommt schon ihr könnt mir doch nicht weismachen das noch niemand von euch ein reziable Dialog mit einem TabControl gemacht hat.



  • Niemand von uns kennt eine Reziable Library



  • Reziable = Resizable?



  • Jup^^

    Also ich kann inzwischen das erste Child Window des CTabs Ctrl resizen. Hier der Code dafür:

    Variable:

    CWnd* m_pTabsWnds[50];
    

    OnSize:

    void CXTabCtrl::OnSize(UINT nType, int cx, int cy) 
    {
        CTabCtrl::OnSize(nType, cx, cy);
    
        int count = 0;
        int iIndex = m_arrayStatusTab.GetSize();
    
        CWnd* wnd = GetTopWindow(); //<--- Hier ist nur das erste wie kreig ich die anderen
        if(wnd) {
            CRect rect;
            wnd->GetWindowRect(rect);
            ScreenToClient(rect);
            rect.bottom = cy-2;
            rect.right = cx-2;
            wnd->MoveWindow(rect);
        }
    
    /*  CWnd* pWndFinish=GetDlgItem(IDD_RESOURCESDLG); //Versuch den Dialog direkt zu rezisen
    
        if(pWndFinish) {
            CRect rcWnd;
            GetDlgItem(IDD_INFODLG)->GetWindowRect(&rcWnd);
            ScreenToClient(&rcWnd);
            pWndFinish->MoveWindow(rcWnd);
            pWndFinish->RedrawWindow(0,0, RDW_INVALIDATE | RDW_UPDATENOW );
        }
    */
    /*  while(count <= iIndex) { // Mein Versuch die anderen zu reszisen
            if(m_pTabsWnds[count]) {
                CWnd* wnd = (CWnd*)m_pTabsWnds[count];
                //CWnd* wnd = GetWindow(GW_HWNDPREV);
                //CWnd* wnd = GetNextWindow();
                if(wnd) {
                    CRect rect;
                    wnd->GetWindowRect(rect);
                    ScreenToClient(rect);
                    rect.bottom = cy-2;
                    rect.right = cx-2;
                    wnd->MoveWindow(rect);
                }
            }
            count++;
        }
    */
    }
    

    AddTab

    void CXTabCtrl::AddTab(CWnd* pWnd, LPTSTR lpszCaption, int iImage)
    {
        ASSERT_VALID(pWnd);
    
        TCITEM item;
        item.mask = TCIF_TEXT|TCIF_PARAM|TCIF_IMAGE;
        item.lParam = (LPARAM) pWnd;
        item.pszText = lpszCaption;
        item.iImage = iImage;
    
        int iIndex = m_arrayStatusTab.GetSize();
        InsertItem(iIndex, &item);
    
        pWnd->SetWindowPos(NULL, m_ptTabs.x, m_ptTabs.y , 0, 0,
                            SWP_FRAMECHANGED | SWP_NOZORDER | SWP_NOSIZE);
    
        pWnd->ShowWindow(iIndex ? SW_HIDE : SW_SHOW);
    
        //** the initial status is enabled
        m_arrayStatusTab.Add(TRUE); 
        m_pTabsWnds[iIndex] = (CWnd*)pWnd; //<--- Versuch das CWnd abzuspeichern
    }
    

    Wie schon gesagt nur das erste Dialogfenster des CTab ändert sich, alle anderen bleiben gleich. Also meien Frage wie reszise ich alle Fenster die im CTab sind.

    Ich bin für jeden Lösungsansatz bzw Idee dankbar.


Anmelden zum Antworten