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 editfeld

    char 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 kein wchar_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.


  • Mod

    Scdhaut Euch mal _countof in der MS-CRT an.
    Ich habe mir aus dem Template ein eigenes gebaut und verwende dies...


Anmelden zum Antworten