Delen via


Hoe maak je een bewerkingselement voor meerregelige tekst

In dit onderwerp wordt gedemonstreerd hoe u een eenvoudige tekstverwerker implementeert door een multiline-editorelement toe te voegen aan de clientruimte van een venster. Met behulp van het meerdere-regelbewerkingselement kan de gebruiker bewerkingsopdrachten selecteren in een menu. Met deze opdrachten kan de gebruiker eenvoudige bewerkingen uitvoeren, zoals een vorige bewerking ongedaan maken, selecties knippen of kopiëren naar het klembord, tekst van het klembord plakken en de huidige selectie verwijderen.

Wat u moet weten

Technologieën

Voorwaarden

  • C/C++
  • Programmeren van Windows-gebruikersinterface

Aanwijzingen

Uw toepassing moet code bevatten om een besturingselement voor tekstbewerking met meerdere regels te creëren en initialiseren, en vervolgens bewerkingsopdrachten van gebruikers te verwerken.

In het volgende C++-codevoorbeeld wordt veel van de functionaliteit van een eenvoudige tekstverwerker geïmplementeerd door een besturingselement voor meerdere regels toe te voegen aan het clientgebied van een venster. Het systeem voert automatisch woordafbrekingsbewerkingen uit voor de bewerkingscontrole en beheert ook de verwerking voor de verticale schuifbalk (gemaakt door ES_AUTOVSCROLL op te geven in de aanroep van de functie CreateWindow).

Gebruikersbewerkingsopdrachten worden via WM_COMMAND meldingsberichten naar het vensterproces verzonden.

Notitie

Als het venster de Windows-lint bevat, moet de grootte van het bewerkelement worden aangepast om voldoende ruimte te bieden voor de hoogte van het lint. Zie Windows Ribbon Frameworkvoor meer informatie.

 

#define ID_EDITCHILD 100
 
LRESULT CALLBACK MainWndProc(HWND hwnd,      // window handle 
                             UINT message,   // type of message 
                             WPARAM wParam,  // additional information 
                             LPARAM lParam)  // additional information 
{ 
    static HWND hwndEdit; 
 
    TCHAR lpszLatin[] =  L"Lorem ipsum dolor sit amet, consectetur "
                         L"adipisicing elit, sed do eiusmod tempor " 
                         L"incididunt ut labore et dolore magna " 
                         L"aliqua. Ut enim ad minim veniam, quis " 
                         L"nostrud exercitation ullamco laboris nisi " 
                         L"ut aliquip ex ea commodo consequat. Duis " 
                         L"aute irure dolor in reprehenderit in " 
                         L"voluptate velit esse cillum dolore eu " 
                         L"fugiat nulla pariatur. Excepteur sint " 
                         L"occaecat cupidatat non proident, sunt " 
                         L"in culpa qui officia deserunt mollit " 
                         L"anim id est laborum."; 
 
    switch (message) 
    { 
        case WM_CREATE: 
            hwndEdit = CreateWindowEx(
                                0, L"EDIT",   // predefined class 
                                NULL,         // no window title 
                                WS_CHILD | WS_VISIBLE | WS_VSCROLL | 
                                ES_LEFT | ES_MULTILINE | ES_AUTOVSCROLL, 
                                0, 0, 0, 0,   // set size in WM_SIZE message 
                                hwnd,         // parent window 
                                (HMENU) ID_EDITCHILD,   // edit control ID 
                                (HINSTANCE) GetWindowLongPtr(hwnd, GWLP_HINSTANCE), 
                                NULL);        // pointer not needed 
 
            // Add text to the window. 
            SendMessage(hwndEdit, WM_SETTEXT, 0, (LPARAM) lpszLatin); 
 
            return 0; 
 
        case WM_COMMAND: 
            switch (wParam) 
            { 
                case IDM_EDUNDO: 
                    // Send WM_UNDO only if there is something to be undone. 
 
                    if (SendMessage(hwndEdit, EM_CANUNDO, 0, 0)) 
                        SendMessage(hwndEdit, WM_UNDO, 0, 0); 
                    else 
                    {
                        MessageBox(hwndEdit, 
                                   L"Nothing to undo.", 
                                   L"Undo notification", 
                                   MB_OK); 
                    }
                    break; 
 
                case IDM_EDCUT: 
                    SendMessage(hwndEdit, WM_CUT, 0, 0); 
                    break; 
 
                case IDM_EDCOPY: 
                    SendMessage(hwndEdit, WM_COPY, 0, 0); 
                    break; 
 
                case IDM_EDPASTE: 
                    SendMessage(hwndEdit, WM_PASTE, 0, 0); 
                    break; 
 
                case IDM_EDDEL: 
                    SendMessage(hwndEdit, WM_CLEAR, 0, 0); 
                    break; 

                case IDM_ABOUT: 
                    DialogBox(hInst,                // current instance 
                              L"AboutBox",           // resource to use 
                              hwnd,                 // parent handle 
                              (DLGPROC) About); 
                    break; 

                default: 
                    return DefWindowProc(hwnd, message, wParam, lParam); 
            } 
            break; 

        case WM_SETFOCUS: 
            SetFocus(hwndEdit); 
            return 0; 

        case WM_SIZE: 
            // Make the edit control the size of the window's client area. 

            MoveWindow(hwndEdit, 
                       0, 0,                  // starting x- and y-coordinates 
                       LOWORD(lParam),        // width of client area 
                       HIWORD(lParam),        // height of client area 
                       TRUE);                 // repaint window 
            return 0; 

        case WM_DESTROY: 
            PostQuitMessage(0); 
            return 0; 

        default: 
            return DefWindowProc(hwnd, message, wParam, lParam); 
    } 
    return NULL; 
}

Over besturingselementen bewerken

Bewerking van Besturingselementreferentie

Besturingselementen bewerken gebruiken

Besturingselement bewerken