listview wie bei mozilla firefox



  • hi,

    wie kann ich mit ownderdraw die downloadliste von mozilla firefox nachmachen?

    hier mal der link für diejenigen die keinen firefox benutzen^^:
    http://2.bp.blogspot.com/_60JWcqOL3AI/RiUBqQOd_GI/AAAAAAAAARE/0P_vd_Ovh3w/s1600/firefox%2Bdownload%2Bwindow.PNG



  • wärs nicht einfacher das ganze selbst zu schreiben als ganz neue Fensterklasse mit eigener Prozedur usw?
    dann machste ein parent in das dann für jedes element ein child erstellt.
    (die childs musste natührlich auch noch schreiben)
    die childs haben dann z.B. immer das blau im Hintergrund als bitmap was sie dann laden und den Text und Icons schickste per SendMessage über ne eigene Message.



  • Ok hier mal ein erweiterter Denkanstoss in Codeform:

    das hier kommt in den Eventhandler deines Parentfensters (falls der Listview ein Child ist und nicht gesubclassed wurde):

    case WM_MEASUREITEM:
    		return OwnerDraw_MeasureItem(hWnd, wParam, lParam);
    	case WM_DRAWITEM:
    		return OwnerDraw_DrawItem(hWnd, wParam, lParam);
    

    die Funktion sagt dem Listview die Zeilenhöhe und Breite. Hast du mehr als einen Listview kannst du auch auf "CtlID" prüfen

    int OwnerDraw_MeasureItem(HWND hWnd, WPARAM wParam, LPARAM lParam){
    
    	if(((MEASUREITEMSTRUCT FAR *)lParam)->CtlType == ODT_LISTVIEW){
    		((MEASUREITEMSTRUCT FAR *)lParam)->itemHeight = 23;		//Festlegung der Zeilenhöhe
    		((MEASUREITEMSTRUCT FAR *)lParam)->itemWidth = 45;		//Festlegung der Zeilenbreite 
    		return 1;
    	}
    	return 0;
    }
    

    ok hier machen wir den eigentlichen Kram für die Ausgabe, Anordnen des Textes und der Icons. Mit ImageList_Draw, DrawText, DrawIconEx, DrawState kannste jetzt die ausgabe von Text und Icon realisieren

    int OwnerDraw_DrawItem(HWND hWnd, WPARAM wParam, LPARAM lParam){
    
    	if(((DRAWITEMSTRUCT FAR *)lParam)->CtlType == ODT_LISTVIEW){
    
    /*
    so hier haste das DRAWITEMSTRUCT, damit sollte soweit alles klar sein
    
    typedef struct tagDRAWITEMSTRUCT{ 
        UINT  CtlType; 
        UINT  CtlID; 
        UINT  itemID; 
        UINT  itemAction; 
        UINT  itemState; 
        HWND  hwndItem; 
        HDC   hDC; 
        RECT  rcItem; 
        DWORD itemData; 
    } DRAWITEMSTRUCT; 
    
    */
    
    		return 1;
    	}
    	return 0;
    }
    

Anmelden zum Antworten