Dyntabctrl in VS2005



  • JPSelter schrieb:

    "find" ist leider kein Member von std 😞

    <algorithm> includieren...



  • Danke für die Antwort

    wenn ich den Source entsprechend ändere kommt jetzt

    error C2039: 'find' : is not a member of 'std'
    ...

    und einiges mehr

    Kann es sein ,dass sich etwas bzgl der namespaces geändert hat?
    (hatte irgandwann mal etwas gelesen weis aber nicht mehr wo )



  • Nein, find ist nachwievor in std.
    Hast du algorithm includiert?

    ansonsten könnte man auch find ersetzen durch:

    std::vector<CDialog*>::iterator beg,end;
    beg = m_tabs.begin();
    end = m_tabs.end();
    for(;beg != end && *beg != m_tabs[nItem];beg++);
    if(beg != end)
      m_tabs.erase(beg);
    

    phlox



  • Prima, die erste Fehlerzeile (m_tabs) ist verschwunden, bleibt nur noch Zeile 2 (m_titel):

    m_tabs.erase(std::find(m_titel.begin(),m_titel.end(),m_titel[nItem]));
    

    Da kommt die Meldung

    d:\c++ projekte\pmd toolbox newkernel\dyntabctrl.cpp(128) : error C2664: 'std::_Vector_iterator<_Ty,_Alloc> std::vector<_Ty>::erase(std::_Vector_iterator<_Ty,_Alloc>)' : cannot convert parameter 1 from 'ATL::CStringT<BaseType,StringTraits>' to 'std::_Vector_iterator<_Ty,_Alloc>'
            with
            [
                _Ty=CString,
                _Alloc=std::allocator<CString>
            ]
            and
            [
                BaseType=char,
                StringTraits=StrTraitMFC_DLL<char>
            ]
            and
            [
                _Ty=CString,
                _Alloc=std::allocator<CString>
            ]
            No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
    


  • JPSelter schrieb:

    Prima, die erste Fehlerzeile (m_tabs) ist verschwunden, bleibt nur noch Zeile 2 (m_titel):

    m_tabs.erase(std::find(m_titel.begin(),m_titel.end(),m_titel[nItem]));
    

    Da kommt die Meldung

    Ich denke dort musst Du ebenfalls schreiben:

    m_titel.erase(std::find(m_titel.begin(),m_titel.end(),m_titel[item]));
    

    @ phlox81
    ich bekomme jetz nur immer folgende Fehlermeldungen:

    c:\..\DynTabCtrl.h(47) : error C2061: syntax error : identifier 'vec'
    c:\..\DynTabCtrl.h(47) : error C2059: syntax error : ')'
    c:\..\DynTabCtrl.h(47) : error C2143: syntax error : missing ')' before ';'
    c:\..\DynTabCtrl.h(47) : error C2838: 'find' : illegal qualified name in member declaration
    ...(3mal)
    ...
    .\DynTabCtrl.cpp(24) : warning C4018: '<' : signed/unsigned mismatch
    .\DynTabCtrl.cpp(65) : warning C4267: 'argument' : conversion from 'size_t' to 'int', possible loss of data
    .\DynTabCtrl.cpp(71) : warning C4018: '>' : signed/unsigned mismatch
    .\DynTabCtrl.cpp(116) : warning C4018: '<' : signed/unsigned mismatch
    .\DynTabCtrl.cpp(122) : error C2065: 'item' : undeclared identifier
    .\DynTabCtrl.cpp(156) : error C2065: 'point' : undeclared identifier
    .\DynTabCtrl.cpp(162) : error C2228: left of '.x' must have class/struct/union
            type is ''unknown-type''
    .\DynTabCtrl.cpp(162) : error C2228: left of '.y' must have class/struct/union
            type is ''unknown-type''
    

    😕 ich blick nicht mehr durch 😕
    help



  • Das habe ich dort ja stehen und bekomme diese Fehlermeldung. Du musst "item" natürlich noch durch "nItem" ersetzen. Ich bin kurz vor dem Ziel, ich spüre es. Bloss lässt sich diese 2.Zeile (m_titel) nicht so wie Zeile 1 (m_tab) austauschen, weil m_titel kein Pointer ist sondern ein CString, das ist der Unterschied. Aber wie muss nun diese 2.Zeile heissen?

    BOOL DynTabCtrl::DeleteItem(int nItem)
    {
    	if(nItem > -1 && nItem < (int)m_tabs.size()) // edit by Peter Selter (signed/unsigned mismatch)
    	{
    		if(CTabCtrl::DeleteItem(nItem))
    		{
    			delete m_tabs[nItem];
    			m_tabs.erase(std::find(m_tabs.begin(),m_tabs.end(),m_tabs[nItem])); // das meine ich mit 1.Zeile (ok)
    			m_tabs.erase(std::find(m_titel.begin(),m_titel.end(),m_titel[nitem])); // das meine ich mit 2.Zeile (error)
    			if(!m_tabs.empty())
    			{
    				SetCurFocus(0);
    				m_aktuellepos = 0;
    				m_tabs[0]->ShowWindow(SW_SHOW);
    				m_tabs[0]->SetFocus();
    				m_tabs[0]->Invalidate();
    			return TRUE;
    			}
    		}
    	}
    	return FALSE;
    }
    

    Du darfst ausserdem ein

    #include <algorithm>
    

    in DynTabCtrl.h nicht vergessen.



  • Ich hab wohl bei all meinenm Herumexperimentieren einiges
    verloren . Habe den Source von phlox81 noch einma eingebaut
    und entsprechend geändert

    jetzt bekomme ich den gleichen Fehler 🤡



  • wer in m_titel sucht, sollte auch in m_titel löschen 😉

    m_titel.erase(std::find(m_titel.begin(),m_titel.end(),m_titel[nitem]));
    


  • Hoppla 🙂 Jetzt gehts, danke für Deine Hilfe!



  • aua

    danke



  • Hi,
    ich würde mich freuen wenn jemand dieses kleine framework was jetzt auf .Net läuft
    zum download bereitstellen würde! 😋
    Ich brauche es auch 🙂

    lg
    pixel



  • pixel schrieb:

    Hi,
    ich würde mich freuen wenn jemand dieses kleine framework was jetzt auf .Net läuft
    zum download bereitstellen würde! 😋
    Ich brauche es auch 🙂

    lg
    pixel

    die neue Version ist bereits online:
    DynTabCtrl

    phlox



  • hi, supper! Danke!
    👍
    lg
    pixel



  • Zu diesem DynTabCtrl im VS2005 hab ich auch noch eine Frage: Wenn ich das DynTabCtrl auf disabled setze (also .EnableWindow(false)), dann bleiben die Reiter in schwarzer Schrift, ich erwarte da eine graue Schrift. Ist das generell mit TabCtrls oder ein Fehler im DynTabCtrl? Das disablen funktioniert, bloss sieht man es nicht auf den ersten Blick, was etwas verwirrend ist.



  • Hi,
    hab eine kleine Funktion(source von codeproject.com) die meine Dialogelemente mit
    vergrössert wenn ich das Dialog vergrössere!
    Alle Controlls gehen mit, nur das DynTabCtrl vergrossert sich nicht, es reagiert nicht auf resize!?

    Hat da jemand schon welche erfahrung gemacht?

    Der Code der dafür sorgt das alle Dialog Elemente neu positioniert werden wenn
    das Dialog vergrössert oder verkleinert wird ist auf www.codeproject.com unter

    ETSLayoutDialog

    zu finden(falls jemand sowas braucht!?)

    lg
    pixel



  • Da bekommt Phlox81 aber wieder eine Fragewelle 😃



  • Was das disablen angeht, keine Ahnung, könnt ihr selber kein C++ und MFC?
    Und wie disabled ihr das Tab? Kann mich nicht erinnern, das jemals implementiert zu haben...

    Was das resizen angeht, OnSize ist nicht überschrieben, müsste eigentlich klappen,
    kenn aber auch hier nicht die Details, habs in den ganzen Jahren wo ich MFC
    gemacht habe nie gebraucht...

    Ich programmier seit einem Jahr wxWidgets, da hat man solche Probleme nicht 😉 *hint hint*



  • Disablen: Siehe eMail.

    Sobald ich mit diesem Projekt hier fertig bin, werde ich nie wieder MFC benutzen... es ist eine Katastrophe. Beispiel: Ich muss in 4 Tagen fertig sein, aber ich habe noch etwa 30 Buttons und 200 Statics korrekt zu resizen. Das kostet Zeit... wie sehr ich doch Delphi liebe... 😉



  • JPSelter schrieb:

    Disablen: Siehe eMail.

    Sobald ich mit diesem Projekt hier fertig bin, werde ich nie wieder MFC benutzen... es ist eine Katastrophe. Beispiel: Ich muss in 4 Tagen fertig sein, aber ich habe noch etwa 30 Buttons und 200 Statics korrekt zu resizen. Das kostet Zeit... wie sehr ich doch Delphi liebe... 😉

    wxWidgets macht das automatisch 😉
    Und ist plattformunabhängig 🙂



  • JPSelter schrieb:

    Disablen: Siehe eMail.

    Kannst Du diese Mail bitte auch veröffentlichen?
    Ich glaube es wären Dir mindestens 2 Leute dankbar 😉


Anmelden zum Antworten