CTreeCtrl

CodeFatal

Erfahrenes Mitglied
Hallo,

Ich portiere gerade eine Software von einem XP System auf ein WinCe 5.0.

Unteranderem erstelle ich ein CTreeCtrl. in der XP Variante benutze ich das Flag TVS_FULLROWSELECT leider wird dies unter CE nicht unterstützt.

Hat jemand von euch schon mal ne Lösung dafür gefunden?

Danke schon mal für die Hilfe.

Gruß Michael
 
Wenn das von CE immer noch nicht unterstützt wird (was wirklich ein trauriges Bild von MS abgibt, CE gibt's ja erst knapp 10 Jahre), dann heißt es wohl mal wieder: selber implementieren.
Wenn HitTest(...) nicht funktioniert (was ich vermute), dann mußt Du Dir, wenn Du die Mausposition des Klicks hast, über GetFirstVisibleItem() das Handle des ersten sichtbaren Item holen, mit GetItemRect(...) das Rechteck des Items holen und vergleichen, ob der Mausklick unter dem Rechteck liegt. Wenn nicht, hast Du's schon gefunden, wenn ja, holst mDu Dir mit GetNextVisibleItem das nächste Handle, davon wieder das Rechteck, vergleichen, usw....

So könnte es gehen ((!) Nicht getestet! Ohne Gewehr! ;-) (Peace!)):
Code:
CTreeCtrl m_treeCtrl;

OnClickTreeCtrl(NMHDR* pNMHDR, LRESULT* pResult) //Reaktion auf NM_CLICK des treeCtrl
{
    DWORD dwPos;
    POINT ptTV, ptSCR;
    HTREEITEM hItem;
    RECT rectItem;

    dwPos = GetMessagePos();

    //Mauskoordinaten ermitteln
    ptSCR.x = ((int)(short)LOWORD(dwPos));
    ptSCR.y = ((int)(short)HIWORD(dwPos));
    ptLV = ptSCR;
    m_treeCtrl.ScreenToClient(&ptTV);

    hItem = m_treeCtrl.GetFirstVisibleItem();
    m_treeCtrl.GetItemRect(hItem, &rectItem, FALSE);
    while((ptTV.y > rectItem.bottom) && hITem != NULL)
    {
        //Nächstes Item
        hItem = m_treeCtrl.GetNextVisibleItem(hItem);
        if(hItem)
        {
            m_treeCtrl.GetItemRect(hItem, &rectItem, FALSE);
        }
    }

    if(hItem)
    {
        //Item gefunden
    }
    else
    {
        //nichts gefunden
    }

}
 
Moin moin,

das war zwar jetzt genau das was ich nicht hören wollte;-) wert es dann aber wohl so machen müssen. Wenn es fertig ist werd ich hier für die Nachwelt das entsprechende posten.

Danke und Gruß

Michael
 
Zurück