Fragen zu selbstgemalten ListBox



  • Hey,
    ich hab ein paar Fragen zu meiner selbstgezeichneten ListBox.
    Zualler erst will ich das sie keinen Tastatur Fokus mehr hat bzw ich denke jedenfalls das es der ist seht selbst.
    Zum Bild

    Ich meine den gestrichelten Rand um das markierte Item.
    Das nächste ist ich möchte das multiselect verboten wird wie macht man das?
    Und zuguter letzt ihr seht ja selber das die Shrift von jedem Item oben am Rand kleppt wie kann ich sie in die Mitte (auf die vertikalen Achse bezogen) bringen?

    Danke schon mal für eure Antworten.
    Mfg



  • Du musst die Listbok ohne LBS_MULTIPLESEL erzeugen.

    Wenn du die Listbox selber zeichnest dann brauchst du den
    Fokus einfach nur nicht zeichen, bzw. beim ausgeben der Schrift
    gehst du einfach einige Pixel nach unter, oder du nutzt die Option
    vertikal zentrieren



  • Okay zwei Probleme sind gelöst, nur das Fokus Problem besteht noch.
    Du meintest ich solte den nicht zeichnen, aber ich zeichne ihn gar nicht.
    Hier der Code:

    case WM_DRAWITEM:
            {
                DRAWITEMSTRUCT *dis = (DRAWITEMSTRUCT*)lParam;
                int move;
                if( dis->hwndItem == TreeView )
                {
                    COLORREF bgColor;
    
                    char buf[100];
                    SendMessage(TreeView,LB_GETTEXT,dis->itemID,(LPARAM)buf);
    
                    string listitems;
                    string rest;
                    HBRUSH hbr;
                    SetTextColor(dis->hDC,RGB(0,0,0));
                    if(dis->itemID==0||dis->itemID==3||dis->itemID==5||dis->itemID==7)
                    {
                        SetBkColor(dis->hDC,RGB(237,237,254));
                        hbr = CreateSolidBrush( RGB(237,237,254) );
                        move=7;
                    }
                    else
                    {
                        SetBkColor(dis->hDC,RGB(255,255,255));
                        hbr = (HBRUSH) GetStockObject(WHITE_BRUSH);
                        if( dis->itemState & ODS_SELECTED )
                        {
                            SetBkColor(dis->hDC,RGB(197,231,246));
                            hbr = CreateSolidBrush( RGB(197,231,246) );
                        }
                        move=18;
                    }
                    FillRect(dis->hDC,&dis->rcItem,hbr);
                    DeleteObject(hbr);
                    TextOut(dis->hDC, dis->rcItem.left+move, dis->rcItem.top+3, buf, strlen(buf));
                 }
            }
            break;
        case WM_MEASUREITEM:
             LPMEASUREITEMSTRUCT mis = (LPMEASUREITEMSTRUCT)lParam;
             mis->itemHeight= 20;
             break;
        case WM_CTLCOLORLISTBOX:
            return (LRESULT)CreateSolidBrush(RGB(255,255,255));
    

Anmelden zum Antworten