An application can use the WinQueryWindowTextLength and WinQueryWindowText functions to retrieve the text from an entry field. WinQueryWindowTextLength returns the length of the text; WinQueryWindowText copies the window text to a buffer.

Typically, an application needs to retrieve the text from an entry field only if the user changes the text. An entry field sends an EN_CHANGE notification code in the low word of the first message parameter of the WM_CONTROL message whenever the text changes. The following code fragment sets a flag when it receives the EN_CHANGE code, checks the flag during the WM_COMMAND message and, if it is set, retrieves the text of the entry field:

    HWND hwnd;
    ULONG msg;
    MPARAM mp1;
    CHAR chBuf[64];
    HWND hwndEntryField;
    LONG cbTextLen;
    LONG cbTextRead;
    static BOOL fFieldChanged = FALSE;

    switch (msg) {
        case WM_CONTROL:
            switch (SHORT1FROMMP(mp1)) {
                case IDD_ENTRYFIELD:

                    /* Check if the user changed the entry-field text. */
                    if ((USHORT) SHORT2FROMMP(mp1) == EN_CHANGE)
                        fFieldChanged = TRUE;
                    return 0;
            }

        case WM_COMMAND:
            switch (SHORT1FROMMP(mp1)) {
                case DID_OK:

                    /* If the user changed the entry-field text,       */
                    /* obtain the text and store it in a buffer.       */
                    if (fFieldChanged) {
                        hwndEntryField = WinWindowFromID(hwnd,
                            IDD_ENTRYFIELD);
                        cbTextLen = WinQueryWindowTextLength(hwndEntryField);
                        cbTextRead = WinQueryWindowText(hwndEntryField,
                            sizeof(chBuf), chBuf);
                        .
                        . /* Do something with the text.               */
                        .
                    }
                    WinDismissDlg(hwnd, 1);
                    return 0;
            }
    }


[Back] [Next]