2009-12-17 11 views
6

Ho un ComboBox che ho impostato DrawMode = DrawMode.OwnerDrawFixed. Quindi gestisco l'evento OnDrawItem e tutto funziona perfettamente. Tuttavia, sembra molto diverso da un ComboBox standard perché il mio non sembra essere reso utilizzando VisualStyles. Devo fare qualcosa per abilitare specificamente il rendering di VisualStyle per il controllo del mio proprietario disegnato? Ho provato SetWindowTheme sul mio controllo, ma non sono sicuro di quale classe tema inviare. Qualsiasi aiuto sarebbe molto apprezzato. Grazie!OwnerDraw ComboBox with VisualStyles

risposta

6

Il lato negativo del disegno proprietario è che quando lo accendi, il proprietario (tu) deve disegnare tutto. Sei quasi completamente da solo.

Se si desiderano stili di visualizzazione, è necessario chiamare direttamente le API di VisualStyles per fare ciò che si desidera. Se vuoi mostrare stati selezionati, focalizzati, abilitati/disabilitati, devi scrivere codice per gestirli tutti.

Questa non è una risposta diretta per i problemi della casella combinata, ma come un esempio di come utilizzare VisualStyles, ecco come ho utilizzato VisualStyles in un TreeView disegnato dal proprietario per disegnare l'icona Più/Meno:

// Draw Expand (plus/minus) icon if required 
if (ShowPlusMinus && e.Node.Nodes.Count > 0) 
{ 
    // Use the VisualStyles renderer to use the proper OS-defined glyphs 
    Rectangle expandRect = new Rectangle(iconLeft-1, midY - 7, 16, 16); 

    VisualStyleElement element = (e.Node.IsExpanded) ? VisualStyleElement.TreeView.Glyph.Opened 
                : VisualStyleElement.TreeView.Glyph.Closed; 

    VisualStyleRenderer renderer = new VisualStyleRenderer(element); 
      renderer.DrawBackground(e.Graphics, expandRect); 
} 
+0

Ho provato a utilizzare VisualStyleRenderer per disegnare la parte, ma l'unico VisualStyleElement che riesco a trovare è il ComboBox.Button. Ne indagherò ancora un po ', o semplicemente arrenderò e renderli tutti ineguagliati. :) –