Listbox Frage



  • Hallo Zusammen,
    hätte zwei Fragen zu einer Listbox.
    1. Ich füge Daten mittels SendMessage(hwnd,LB_ADDSTRING,0,(long)"TEXT"); ein. Was muss ich machen, dass die Liste bei neuen Einträgen automatisch nach unten scrollt?
    2.Kann ich den Textstil in der Listbox irgendwie verrändern?

    Gruß mr.tompkins



  • ich glaube du musst bei der erstellung der LB beim style noch das flag
    WS_VSCROLL setzen.

    Gruß Tobi.



  • ach ja noch was weiss auch net so wirklich obs funktioniert, aber des mit deiner schrift die du aendern willst könnte so geregelt werden:

    erst erstellst du dir eine schrift mit:

    HFONT CreateFont(
    
        int nHeight,	// logical height of font 
        int nWidth,	// logical average character width 
        int nEscapement,	// angle of escapement 
        int nOrientation,	// base-line orientation angle 
        int fnWeight,	// font weight 
        DWORD fdwItalic,	// italic attribute flag 
        DWORD fdwUnderline,	// underline attribute flag 
        DWORD fdwStrikeOut,	// strikeout attribute flag 
        DWORD fdwCharSet,	// character set identifier 
        DWORD fdwOutputPrecision,	// output precision 
        DWORD fdwClipPrecision,	// clipping precision 
        DWORD fdwQuality,	// output quality 
        DWORD fdwPitchAndFamily,	// pitch and family 
        LPCTSTR lpszFace 	// pointer to typeface name string 
       );
    

    und dann setzt du des Handle von HFONT hier ein:

    SendMessage( BUTTON_HWND, WM_SETFONT, (WPARAM) hFont, 0 );
    

    probiers einfach mal aus.



  • Super hat funktioniert.
    Hast Du noch eine Idee wie ich einen Edit Control bearbeiten müsste, dass er bei betätigen der Enter-Taste einen bestimmten Befehl ausführt?



  • Ich glaube das bekommst du nur mittels Subclasing hin. Guck mal auf www.winapi.net da ist ein schönes einfach beispiel. Vielleicht gehts aber auch noch leichter?

    MfG schirrmie



  • könnte man des nicht auch mit dem eingabefocus arbeiten? also abfrage ob das jeweilige Editfeld gerade den eingabefocus hat und wenn Enter gedrueckt wurde, also mit ner abfrage if( LOWORD( wParam ) == VK_RETURN ), gepusht wurde... dann die anweisung geben etwas zu machen. könnte evtl funktionieren:)

    Gruß Tobi.



  • Habe Folgendes versucht :
    [cpp]
    hwndLC = CreateWindowEx(WS_EX_CLIENTEDGE,"EDIT", 0,WS_CHILD|WS_BORDER|WS_VISIBLE,
    35, 250, 320, 25, hwnd, (HMENU)ID_ENTER, hInstance, NULL);

    ...

    case WM_COMMAND:
    ...
    case ID_ENTER:
    if(LOWORD(lParam)==VK_RETURN)...
    [cpp]
    hat aber nicht funktioniert.



  • mr. tompkins schrieb:

    1. Ich füge Daten mittels SendMessage(hwnd,LB_ADDSTRING,0,(long)"TEXT"); ein.

    Keine Gute Idee. Das _kann_ (UNICODE/ANSI) in die Hose gehen. Machs besser so:

    SendMessage(hwnd, LB_ADDSTRING, 0, reinterpret_cast<LPARAM>(TEXT("TEXT")));
    

    mr. tompkins schrieb:

    Was muss ich machen, dass die Liste bei neuen Einträgen automatisch nach unten scrollt?

    Zum Scrollen musst Du, wie T0bi schon gesagt hat, das Style WS_VSCROLL bzw. WS_HSCROLL angeben.

    mr. tompkins schrieb:

    2.Kann ich den Textstil in der Listbox irgendwie verrändern?

    Joar versuchs mal mit WM_SETFONT, falls das nix wird, dann einfach mal einen Message-Handler für WM_CTLCOLORLISTBOX schreiben und die Schrift im HDC ändern (lParam).
    Eine (mir besser gefallende) Alternative zu CreateFont ist CreateFontIndirect mit einem Objekt der Struktur LOGFONT. Geht aber beides 😉 .

    @T0bi bzw. mr. tompkins:

    T0bi schrieb:

    könnte man des nicht auch mit dem eingabefocus arbeiten? also abfrage ob das jeweilige Editfeld gerade den eingabefocus hat und wenn Enter gedrueckt wurde, also mit ner abfrage if( LOWORD( wParam ) == VK_RETURN ), gepusht wurde... dann die anweisung geben etwas zu machen. könnte evtl funktionieren:)

    Nein das wird nicht funktionieren, da Du bei dieser Nachricht keinen Virtual-Key-Code bekommst. Da musst Du unweigerlich Subclassen.



  • mr. tompkins schrieb:

    2.Kann ich den Textstil in der Listbox irgendwie verrändern?

    Dafür habe ich mal ne kleine Klasse geschrieben. Siehe www.webfritzi.de.vu in der WinAPI-Ecke unter "Klassen". Einfach so:

    CFont* lpFont = new CFont( TEXT("Times New Roman"), 10, FS_BOLD );
    SendMessage( hListBox, WM_SETFONT, lpFont->GetHandle(), MAKELPARAM(TRUE, 0) );
    ...
    delete lpFont;
    

Log in to reply