TreeView mit Dreieck statt +/-



  • Hallo,

    wenn ich mit
    HTHEME hTheme = OpenThemeData(NULL, L"TREEVIEW");
    und
    drawThemeBackground(hTheme, hdc, TVP_GLYPH, GLPS_OPENED, &rect, NULL);
    einen Teil meines Trees ausgebe, erscheint immer das alte +/- Symbol.
    Ich hätte aber gerne das neuere Dreiecksymbol. Wie bekomme ich Windows dazu dieses auszugeben?

    Sati32



  • Also, zunächst einmal Grundlegendes: Die Darstellung mit den Dreiecken ist erst ab Windows Vista möglich (bzw. Nachfolger Windows 7).

    Diese kleine Modifikation macht aus "+/-"-Buttons nun "Expando"-Schaltflächen (animierte Dreiecke) im TreeView-Control (nur schnell zusammenkopiert):

    if ( b_winvistastyle )
    {
      //Fensterstil für Expando-Schaltflächen:
      dwStyle = WS_CHILD | WS_CLIPSIBLINGS | TVS_HASBUTTONS | TVS_SHOWSELALWAYS | TVS_EDITLABELS | TVS_TRACKSELECT;
    }
    else
    {
      //Fensterstil für klassische "+/-"-Schaltflächen:
      dwStyle = WS_CHILD | WS_CLIPSIBLINGS | TVS_HASBUTTONS | TVS_SHOWSELALWAYS | TVS_EDITLABELS | TVS_HASLINES;
    }
    //TreeView-Fenster als Child-Fenster generieren:
    hwnd_tree = CreateWindowEx( WS_EX_CLIENTEDGE, WC_TREEVIEW, TEXT( "Tree View" ), dwStyle,
                                0, 0, 0, 0, hwnd_frame, (HMENU)IDW_TREEVIEWWINDOW,
                                ghinstance_app, NULL );
    
    if ( b_winvistastyle )
    {
      //Windows Vista visual style aktivieren
      SetWindowTheme( hwnd_tree, L"Explorer", NULL );     //Windows Vista visual style beim TreeView aktivieren.
                                                          //Statt "+/-"-Buttons erscheinen nun "Expando"-Schaltflächen (animierte Dreiecke).
                                                          //Die Selektion der einzelnen Items sind jetzt semi-transparent.
      SendMessage( hwnd_tree, TVM_SETEXTENDEDSTYLE, TVS_EX_FADEINOUTEXPANDOS | TVS_EX_DOUBLEBUFFER,
                                                    TVS_EX_FADEINOUTEXPANDOS | TVS_EX_DOUBLEBUFFER );
                                                          //-I found out, that the TVS_EX_FADEINOUTEXPANDOS fade-out
                                                          // effect will work correctly only if TVS_TRACKSELECT is set.
                                                          //-Treeview will flash when it fade in/out, how can I solve this?? Add TVS_EX_DOUBLEBUFFER is OK.
    }
    

    Mit b_winvistastyle (0=klassisch +/-, oder 1=Expando-Schaltflächen) legst Du fest, welche Darstellung Du haben möchtest.

    HTH,
    Martin



  • danke, hat prima geklappt 🙂

    Sati32


Anmelden zum Antworten