tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
8
ZUGRIFFE
2105
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von CodeFatal
    CodeFatal CodeFatal ist offline Mitglied Platin
    Registriert seit
    Oct 2004
    Beiträge
    509
    Hallo Leuts,

    ich verzweifel gerade an mir selbst.

    Folgendes ich habe ein Element vom Typ CTreeCtrl erzeugt
    Code :
    1
    2
    
    m_Tree[i].Create(TVS_HASBUTTONS|TVS_LINESATROOT|TVS_HASLINES|TVS_DISABLEDRAGDROP|TVS_SHOWSELALWAYS|TVS_NOTOOLTIPS , r, this, START_ID_TREE+i);
    m_Tree[i].ModifyStyleEx(0, WS_EX_CLIENTEDGE, 0);

    Folgende Messages werden abgefangen:
    Code :
    1
    2
    3
    4
    5
    
        ON_NOTIFY(NM_CLICK, START_ID_TREE+0, OnClickTree)
        ON_NOTIFY(NM_DBLCLK, START_ID_TREE+0, OnDblclkTree)
        ON_NOTIFY(NM_SETFOCUS, START_ID_TREE+0, OnSetfocusTree)
        ON_NOTIFY(TVN_SELCHANGED, START_ID_TREE+0, OnSelchangedTree)
        ON_NOTIFY(TVN_ITEMEXPANDED, START_ID_TREE+0, OnTvnItemexpanded)

    Mein Problem:
    Die OnSelchangedTree wird nicht aufgerufen. Der Code ist für XP und WinCE 5.0 geschrieben. auf dem WinCe 5.0 gibt es keine Probleme.
    Kann mir jemand weiterhelfen? Bzw. nen Tip geben, wie ich testen/ermitteln kann wo das Problem ist?

    Bräuchte dringend Hilfe. Vielleicht seh ich auch nur den Wald vor lauter Bäumen nicht.

    Mit freundlichem Gruß
    Michael
     
    Grüß die Welt, dann grüßt sie dich!

    Keine Panik, die Titanic ist schon gesunken!

  2. #2
    Avatar von CodeFatal
    CodeFatal CodeFatal ist offline Mitglied Platin
    Registriert seit
    Oct 2004
    Beiträge
    509
    Ich nochmal,

    hab jetzt ne kleine Demo Anwendung geschrieben.
    Zwei CTreeCtrl auf einer Dialogfeldbasierten Anwendung.Eines über den Wizard angelegt und eines in der OnCreate. Letzteres funktioniert nur eingeschränkt. Messages wie TVN_SELCHANGED und TVN_ITEMEXPANDED werden nicht ausgelöst.
    Was mache ich anderes als der Wizard und wie kann ich das Problem lösen.

    Gruß Michael
     
    Grüß die Welt, dann grüßt sie dich!

    Keine Panik, die Titanic ist schon gesunken!

  3. #3
    Avatar von jokey2
    jokey2 jokey2 ist offline Mitglied Smaragd
    Registriert seit
    Nov 2004
    Beiträge
    1.235
    Wenn Du TreeControls dynamisch anlegst, dann vergibst du auch die ID's dynamisch.
    DAfür solltest du Dir einen Bereich von ID's reservieren, die Du dann beim Erzeugen verwendest. Vielleicht speicherst Du Dir die ID und den Zeiger auf das erzeugte TreeControl in einer map<int,CTreeCtrl*>.
    Dann verwendest Du
    Code :
    1
    
    ON_NOTIFY_RANGE(TVN_SELCHANGED, START_ID_TREE, END_ID_TREE, OnSelchangedTree)
    und die Funktion
    Code :
    1
    
    afx_msg void OnSelchangedTree(UINT id, NMHDR *pNotifyStruct, LRESULT *pResult)
    Dort kannst du dann anhand der ID den Zeiger auf das entsprechende TreeCtrl aus der map holen.
     

  4. #4
    Avatar von CodeFatal
    CodeFatal CodeFatal ist offline Mitglied Platin
    Registriert seit
    Oct 2004
    Beiträge
    509
    Danke für die Antwort,

    das mit der Range wusste ich nicht hab da für jedes Element ne eigene Zeile spendiert
    Werd das auf jedenfall mit aufnehmen. Nur leider löst das mein Problem nicht.

    Beim Testprogramm habe ich nur ein Dynamisches Element und da reagieren die Controls genau wie in der eigentlichen Software. Irgendwie scheints, das die NOTIFY Nachrichten nicht weiter gegeben werden. Für CStatic gibts das SS_NOTIFY Flag für Trees hab ich ähnliches nicht gefunden

    Andere Nachrichten wie die SetFocus oder Reaktion auf den Click werden an das Control weiter gereicht. Es muss also noch irgendwas anderes im Busch sein.

    Hier einmal ein Auszug aus dem Quellcode:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    
    void CProjekt495Dlg::DoDataExchange(CDataExchange* pDX)
    {
        int i;
        CDialog::DoDataExchange(pDX);
        //{{AFX_DATA_MAP(CProjekt495Dlg)
        for(i=0 ; i<ANZ_TREE ; i++)
            DDX_Control(pDX, START_ID_TREE+i, m_Tree[i]);
        //}}AFX_DATA_MAP
    }
     
    BEGIN_MESSAGE_MAP(CProjekt495Dlg, CMyDialog)
        //{{AFX_MSG_MAP(CProjekt495Dlg)
    //Tree      #define ANZ_TREE            2
        ON_NOTIFY(NM_CLICK, START_ID_TREE+0, OnClickTree)
        ON_NOTIFY(NM_DBLCLK, START_ID_TREE+0, OnDblclkTree)
        ON_NOTIFY(NM_SETFOCUS, START_ID_TREE+0, OnSetfocusTree)
        ON_NOTIFY(TVN_SELCHANGED, START_ID_TREE+0, OnSelchangedTree)
        ON_NOTIFY(TVN_ITEMEXPANDED, START_ID_TREE+0, OnTvnItemexpanded)
     
        ON_NOTIFY(NM_CLICK, START_ID_TREE+1, OnClickTree)
        ON_NOTIFY(NM_DBLCLK, START_ID_TREE+1, OnDblclkTree)
        ON_NOTIFY(NM_SETFOCUS, START_ID_TREE+1, OnSetfocusTree)
        ON_NOTIFY(TVN_SELCHANGED, START_ID_TREE+1, OnSelchangedTree)
        ON_NOTIFY(TVN_ITEMEXPANDED, START_ID_TREE+1, OnTvnItemexpanded)
        //}}AFX_MSG_MAP
    END_MESSAGE_MAP()
     
    //Schnittstellen aus dem Header
    afx_msg void OnClickTree(NMHDR* pNMHDR, LRESULT* pResult);
    afx_msg void OnDblclkTree(NMHDR* pNMHDR, LRESULT* pResult);
    afx_msg void OnSetfocusTree(NMHDR* pNMHDR, LRESULT* pResult);
    afx_msg void OnSelchangedTree(NMHDR* pNMHDR, LRESULT* pResult);
    afx_msg void OnTvnItemexpanded(NMHDR *pNMHDR, LRESULT *pResult);

    Ich weiß die MessageMap ist nicht dolle aber da hab ich ja jetzt ne bessere Lösung

    Ist denn da irgendein Fehler erkennbar?
    Ich steh echt auf dem Schlauch.
    Wie gesagt bei dem Embedded System für WinCE 5.0 gibt es keine Probleme.

    Gruß Michael
     
    Grüß die Welt, dann grüßt sie dich!

    Keine Panik, die Titanic ist schon gesunken!

  5. #5
    Avatar von jokey2
    jokey2 jokey2 ist offline Mitglied Smaragd
    Registriert seit
    Nov 2004
    Beiträge
    1.235
    Tut mir leid, aber dann weiß ich auch nicht mehr weiter. Der Code schaut soweit gut aus. Vielleicht hat ja noch jemand eine zündende Idee.
     

  6. #6
    Avatar von Endurion
    Endurion Endurion ist offline Mitglied Diamant
    Registriert seit
    Apr 2004
    Beiträge
    2.151
    Möglicherweise kollidiert die dynamische ID mit einer bereits verwendeten ID?

    Ansonsten würde ich auf den ganzen MessageMap-Krempel verzichten und über OnNotify/PreTranslateMessage/OnCommand direkt auf die Nachrichten abfragen. Dort kannst du dann auch mit dem HWND vergleichen.
     

  7. #7
    Avatar von CodeFatal
    CodeFatal CodeFatal ist offline Mitglied Platin
    Registriert seit
    Oct 2004
    Beiträge
    509
    Falls die dynamische Id mit ner anderen im Konflikt stände würde dann nicht auch der ganze andere Messegekram für dieses Element schieflaufen? Und in meinem Demo Programm hab ich das selbe Problem und da sind andere Ids.

    Irgendwie ist mir das mal richtig suspekt...

    Gruß Michael
     
    Grüß die Welt, dann grüßt sie dich!

    Keine Panik, die Titanic ist schon gesunken!

  8. #8
    Avatar von CodeFatal
    CodeFatal CodeFatal ist offline Mitglied Platin
    Registriert seit
    Oct 2004
    Beiträge
    509
    Guten Morgen,

    so das Problem hat sich gelöst.

    Das Problem ist dem Unicode zuzuordnen.

    Ersetzt man TVN_SELCHANGED durch TVN_SELCHANGEDW klappt das ganze.

    Hoffe der Nachwelt ist damit geholfen.

    So Long

    Michael
     
    Grüß die Welt, dann grüßt sie dich!

    Keine Panik, die Titanic ist schon gesunken!

  9. #9
    prado prado ist offline Grünschnabel
    Registriert seit
    May 2008
    Beiträge
    1
    Hi Michael,

    ich hatte dasselbe Problem, stundenlang rumprobiert, bis ich deinen Beitrag fand.
    Die Lösung ist unglaublich; da muss man erst mal drauf kommen.
    Du hast mir sehr geholfen!
     

Ähnliche Themen

  1. Dringendes Problem...
    Von deadline im Forum Microsoft Windows
    Antworten: 2
    Letzter Beitrag: 08.09.06, 19:28
  2. Antworten: 4
    Letzter Beitrag: 22.03.06, 20:50
  3. Habe ein dringendes Problem!
    Von Tacko im Forum PHP
    Antworten: 5
    Letzter Beitrag: 10.09.04, 15:45
  4. ganz dringendes problem
    Von sonix-planet im Forum HTML & XHTML
    Antworten: 6
    Letzter Beitrag: 06.05.03, 14:58
  5. Dringendes Problem mit AS******
    Von K@C im Forum Flash Plattform
    Antworten: 2
    Letzter Beitrag: 01.12.01, 11:33