Windows Programmierung: Das Editfeld
Willemers Informatik-Ecke
Einführende Informationen über die Programmierung von Kontrollelementen werden hier vorausgesetzt.

Stile

Der Stil des Elementes wird bei der Erzeugung festgelegt. Neben den allgemeinen Fensterstilen besitzt das Editfeld eigene Stile:
ES_AUTOHSCROLL
Der Text wird 10 Zeichen weitergeschoben, wenn der Rand des Elements erreicht wird.
ES_LEFT
linksbündig
ES_CENTER
zentriert
ES_RIGHT
rechtsbündig
ES_LOWERCASE
wandelt alle Eingabezeichen in Kleinbuchstaben
ES_UPPERCASE
wandelt alle Eingabezeichen in Großbuchstaben
ES_NOHIDESEL
Bei Verlust des Eingabefokus wird normalerweise die Selektion verborgen. Dieser Stil verhindert dies.
ES_OEMCONVERT
Die Eingaben werden von ANSI in den OEM-Zeichensatz konvertiert.
ES_PASSWORD
Für jedes eingegebene Zeichen wird ein Stern angezeigt.
ES_READONLY
Änderungen am Inhalt des Eingabefeldes werden verhindert.
ES_MULTILINE
Mehrzeiliges Eingabefeld
ES_AUTOVSCROLL
Wenn der Anwender RETURN in der letzten Zeile eines mehrzeiligen Eingabefeldes eingibt, wird eine Seite weitergeblättert.
ES_WANTRETURN
Ein mehrzeiliges Eingabefeld kann so ein RETURN empfangen, das ansonsten an die Dialogbox ginge, um das Default-Element auszulösen.

Ansteuerung

WM_GETTEXT
wParam = max Zeichenzahl, lParam = Adresse des Puffers

lese den Inhalt des Eingabefeldes

WM_SETTEXT
wParam = 0, lParam = Adresse des Puffers

schreibe in den Inhalt des Eingabefeldes

EM_LIMITTEXT
wParam = max Zeichen, lParam = 0

begrenzt die Zahl der eingegebenen Zeichen.

WM_SETFONT
wParam = HFONT, lParam (boolean) Redraw

Der Zeichensatz des Elements wird umgeschaltet.

Ereignisse

EN_CHANGE
Änderung am Editfeld nachdem sie angezeigt werden.
EN_UPDATE
Änderung am Editfeld bevor sie angezeigt werden.

Beispiel

Diese Fensterfunktion erzeugt beim Start des Fensters ein Eingabefeld und merkt sich in der statischen Variablen EdHwnd das Handle. Die 1201 ist die (beliebige) ID des Editfeldes. Sie muss allerdings im Fenster eindeutig sein. Wird der Menüpunkt mit der ID M_SHOW (in der Ressource zu erstellen) gedrückt, erscheint der aktuelle Text des Eingabefeldes in der Messagebox. Der Menüpunkt IDM_EXIT sorgt nur für ein reguläres Beenden des Programmes.

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
static HWND EdHwnd;	// merke Dir das Handle des Edit-Controls
char str[256];

	switch (message) {
	case WM_CREATE:
		EdHwnd = CreateWindow("EDIT", "", 
			ES_AUTOHSCROLL|WS_VISIBLE|WS_CHILD|WS_BORDER,
			10,50,300, 30, hWnd, (HMENU)1201, hInst, 0);
		break;
	case WM_COMMAND:
		switch (LOWORD(wParam)) {
		case M_SHOW:
			SendMessage(EdHwnd, WM_GETTEXT, sizeof(str), (ULONG)str);
			MessageBox(hWnd, str, "hallo", MB_OK);
			break;
		case IDM_EXIT:
			DestroyWindow(hWnd);
			break;
		}
		break;
	case WM_DESTROY:
		PostQuitMessage(0);
		break;
	default:
		return DefWindowProc(hWnd, message, wParam, lParam);
   }
   return 0;
}

In einer Dialogbox ist der Zugriff auf die Textfelder durch die Funktionen SetDlgItemText und GetDlgItemText noch etwas einfacher.

char str[64];

  SetDlgItemText(hDlg, IDC_EDCOLS, str);
  GetDlgItemText(hDlg, IDC_EDCOLS, str, sizeof(str));

Der erste Parameter ist das Dialoghandle, der zweite die Ressource-ID des Kontrollelements. Im dritten Parameter wird der Speicher angegeben, der den String hält. GetDlgItemText besitzt noch einen vierten Parameter, der die Grösse dieses Speichers angibt.