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;