Erstellen eines Mehrzeilen-Bearbeitungssteuerelements
In diesem Thema wird veranschaulicht, wie Sie eine einfache Textverarbeitung implementieren, indem Sie dem Clientbereich eines Fensters ein mehrzeiliges Bearbeitungssteuerelement hinzufügen. Mithilfe des Mehrzeilen-Bearbeitungssteuerelements kann der Benutzer Bearbeitungsbefehle aus einem Menü auswählen. Mit diesen Befehlen kann der Benutzer einfache Bearbeitungsvorgänge ausführen, z. B. eine vorherige Aktion rückgängig machen, Auswahlen ausschneiden oder in die Zwischenablage kopieren, Text aus der Zwischenablage einfügen und die aktuelle Auswahl löschen.
Wichtige Informationen
Technologien
Voraussetzungen
- C/C++
- Programmierung der Windows-Benutzeroberfläche
Anweisungen
Ihre Anwendung muss Code enthalten, um eine instance eines mehrlineigen Bearbeitungssteuerelements zu erstellen und zu initialisieren und anschließend Benutzerbearbeitungsbefehle zu verarbeiten.
Im folgenden C++-Codebeispiel wird ein Großteil der Funktionalität eines einfachen Textverarbeitungsprogramms implementiert, indem dem Clientbereich eines Fensters ein mehrzeiliges Bearbeitungssteuerelement hinzugefügt wird. Das System führt automatisch Wordwrap-Vorgänge für das Bearbeitungssteuerelement aus und übernimmt auch die Verarbeitung der vertikalen Bildlaufleiste (die durch Angabe ES_AUTOVSCROLL im Aufruf der CreateWindow-Funktion erstellt wird).
Benutzerbearbeitungsbefehle werden über WM_COMMAND Benachrichtigungen an den Fensterprozess gesendet.
Hinweis
Wenn das Fenster das Windows-Menüband enthält, muss die Größe des Bearbeitungssteuerelements an die Höhe des Menübands angepasst werden. Weitere Informationen finden Sie unter Windows-Menübandframework.
#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;
}
Zugehörige Themen