Eingabefeld
-
Hallo zusammen,
ich erweitere das Beispielprogramm AmCap aus dem SDK 7.1. U.a. möchte ich ein Eingabefeld auf dem Hauptfenster abbilden und auch den später eingegebenen Inhalt weiter verarbeiten. Das Hauptfenster wird mit CreateWindowEx erstellt:
ghwndApp=CreateWindowEx(dwExStyle, MAKEINTATOM(ID_APP), // Class name gszAppName, // Caption // Style bits WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN, CW_USEDEFAULT, 0, // Position cxWindow, cyWindow, //320,300, // Size // Größe des Hauptfensters (HWND)NULL, // Parent window (no parent) (HMENU)NULL, // use class menu hInst, // handle to window instance (LPSTR)NULL // no params to pass on );
Textausgaben habe ich mit Textout erstellt.
TextOut(hdc, 1100, 50, (LPCWSTR)buffer_lX, lstrlenW(buffer_lX));
Leider finde ich keine passende Anleitung, wie ich ein Eingabefeld erstellen kann. Es wäre nett, wenn mir jemand einen kleinen Tipp geben würde.
Vielen Dank im Voraus.
Grüße
datatom
-
Das schaut mich eher nach WinAPI an...
Was Du wissen willst steht bei CreateWindow() in den Remarks.
-
Danke für die Antwort. Das Eingabefeld wird angezeigt.
hEdit = CreateWindowEx(WS_EX_CLIENTEDGE, szStatusClass2, L"22", // <- das ist der Inhalt der Editfelds WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_HSCROLL | ES_MULTILINE | ES_AUTOVSCROLL | ES_AUTOHSCROLL, 1100, 200, 100, 100, hwnd, NULL, GetModuleHandle(NULL), NULL);
-
Dieser Thread wurde von Moderator/in Jochen Kalmbach aus dem Forum C++/CLI mit .NET in das Forum WinAPI verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Das nächste Problem: Wie kann ich den Wert aus dem Eingabefeld weiter verarbeiten? Ich weiß das es mit GetWindowText funktionieren muss. Ich habe es aber die halbe Nacht versucht es klappt nicht:-(
Hat jemand einen Tipp?
-
Kuck dich mal bei gelegenheit unter Edit Control Reference ein wenig um.
GetWindowText verlangt die Paramter
HWND = Handle des Editfeldes.
LPTSTR = char Puffer mit einer zugewiesenen größe
int = Anzahl der zu kopierenden Karaktere aus dem editfeldchar szBuffer[256]={0}; int iCopyChar = GetWindowText(hWndEdit, szBuffer, 255);
-
Konkret für AmCap
TCHAR s[20]; // Textfeld beschreiben SendMessage(hEdit, WM_SETTEXT, 0, (LPARAM)L"Hello my new World"); // Textfeld auslesen GetWindowText(hEdit, s, 20); SetForegroundWindow(hEdit); ShowWindow(hEdit, SW_SHOW);
-
Danke für die Antworten. Habs jetzt so gemacht:
wchar_t szText2[10] = {' '};
...
static HWND hEdit;
...
case WM_CREATE: // Eingabefeld hEdit = CreateWindowEx(WS_EX_CLIENTEDGE, szStatusClass2, L"22", // <- das ist der Inhalt der Editfelds WS_CHILD | WS_VISIBLE , 1100, 300, 100, 20, hwnd, NULL, GetModuleHandle(NULL), NULL);
...
GetWindowText(hEdit, szText2, sizeof(szText2));
Visual C++ 2010 und aktuelle Bibliotheken
-
@rT!f@Ct schrieb:
Kuck dich mal bei gelegenheit unter Edit Control Reference ein wenig um.
...
btw:
datatom schrieb:
wchar_t szText2[10] = {' '};
Warum so?
{' '}
ist keinwchar_t
...vgl. Unicode
-
GetWindowText erwartet als dritten Parameter die Anzahl der Zeichen (ob jetzt char oder wchar_t ist nebensächlich). Daher ist der Code gerade bei so einer geringen Buffergröße sehr mutig:
GetWindowTextW(hEdit, szText2, sizeof(szText2)/sizeof(wchar_t);
Bzw. die TCHAR-Fassung
TCHAR szText2 = {}; // warum eigentlich alles nullsetzen, GetWindowText schreibt schon den Nullterminator GetWindowText(hEdit, szText2, sizeof(szText2)/sizeof(TCHAR);
-
TCHAR szText2[10] = {};
Ehm, so natürlich...
-
Thorgrim schrieb:
[...]
Warum nicht gleich
sizeof(szText2) / sizeof(szText2[0])
?
-
Swordfish schrieb:
Thorgrim schrieb:
[...]
Warum nicht gleich
sizeof(szText2) / sizeof(szText2[0])
?Klar, so ist es natürlich besser. Ich wollte auch eigentlich nur auf den Fehler hinweisen.
-
Scdhaut Euch mal _countof in der MS-CRT an.
Ich habe mir aus dem Template ein eigenes gebaut und verwende dies...