DlgDirList



  • Hi,

    mit DlgDirList
    http://msdn.microsoft.com/en-us/library/bb761366(v=VS.85).aspx
    kann ich ja eine Listbox mit meinen Dateien Ordnern usw "füllen".

    Ich würde nun gerne eine Listbox füllen, die aber nicht auf
    einer DlgBox sondern auf meinem Hauptfenster steht..

    DlgDirList(
      __in     HWND hDlg,                /*     <--- WAS DA HIN?  */
      __inout  LPTSTR lpPathSpec,
      __in     int nIDListBox,           /*     <--- WAS DA HIN?  */
      __in     int nIDStaticPath,        /*     <--- WAS DA HIN?  */
      __in     UINT uFileType
    );
    

    Oder gibts da eine gänzlich bessere Methode?

    Besten Dank jetzt schonmal 🙂


  • Mod

    Doku lesen:
    http://msdn.microsoft.com/en-us/library/bb761366(v=VS.85).aspx
    hDlg darf auch das Parent Window sein.
    nIDListBox ist die ID Deiner ListBox,
    nIDStaticPath darf 0 sein.

    Doku einfach weiterlesen und Du kommst auf:

    DlgDirList sends the LB_RESETCONTENT and LB_DIR messages to the list box.

    http://msdn.microsoft.com/en-us/library/bb775185(v=VS.85).aspx



  • Hmja, wie bekomme ich denn die ID meiner Listbox?^^
    Vielleicht ist das ja eine doofe Frage aber mir
    fällt da gerade nichts ein..



  • Ah ok, ich kann die (HMENU) ID benutzen 🙂

    Hätte da aber gleich noch ne Frage:
    Kann ich einzelne Zeilen färben?


  • Mod

    namenamename schrieb:

    Kann ich einzelne Zeilen färben?

    Nur mit Ownerdraw...



  • hm..

    // Erstellen...
    hControl = CreateWindowEx(...,WS_VISIBLE|WS_CHILD|LBS_HASSTRINGS|LBS_OWNERDRAWFIXED,...);
    
    // Dann WM_DRAWITEM im Eltern-Fenster abfangen
    // in lParam verstecken sich die Infos über das was gezeichnet werden soll und zwar in Form von DRAWITEMSTRUCT
    case WM_DRAWITEM:
        {
            DRAWITEMSTRUCT *dis = (DRAWITEMSTRUCT*)lp;
            if( dis->hwndItem == hControl ) {  // Prüfen welche Listbox gezeichnet wird
                COLORREF bgColor;
                // Falls Eintrag selektiert dann roter Hintergrund, sonst grün
                if( dis->itemState & ODS_SELECTED )
                    bgColor = RGB(255,0,0);
                else
                    bgColor = RGB(0,255,0);
                // Rechteck für Hintergrund zeichnen
                HBRUSH hbr = CreateSolidBrush(bgColor);
                FillRect(dis->hDC,&dis->rcItem,hbr);
                DeleteObject(hbr);
                // Den Text des Items nehmen und mit Textout darstellen
                char buf[100];
                SendMessage(hControl,LB_GETTEXT,dis->itemID,(long)buf);
                SetBkColor(dis->hDC,bgColor);
                TextOut(dis->hDC, dis->rcItem.left, dis->rcItem.top, buf, strlen(buf));
            }
            return 0;
        };
    

    Das hab ich hier im Forum gefunden, da ich alle Dateien mit einer bestimmten Endung (zB. .txt) färben möchte, wäre das aber ein ziemliches geraffel..

    Gibts ne möglichkeit einen Treeview oder sowas ähnlich DlgDirList()
    zu füttern? Oder noch was besseres?

    Falls nicht, werd ich wohl die ownerdraw Technik benutzen müssen..

    Besten Dank trotzdem schonmal 🙂


Anmelden zum Antworten