Quellcode
- #include <windows.h>
- LPCSTR MainClassName = "Texteditor";
- // Zum Empfangen und Auswerten der messages
- LRESULT CALLBACK WndProc(HWND hWnd, UINT iMsg, WPARAM wParam, LPARAM lParam);
- int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
- {
- // Generelle Fensterstruktur registrieren
- WNDCLASSEX wc;
- wc.cbSize = sizeof(WNDCLASSEX);
- wc.style = 0;
- wc.lpfnWndProc = WndProc;
- wc.cbClsExtra = 0;
- wc.cbWndExtra = 0;
- wc.hInstance = hInstance;
- wc.hIcon = LoadIcon(GetModuleHandle(NULL), MAKEINTRESOURCE(0));
- wc.hCursor = LoadCursor(NULL, IDC_ARROW);
- wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
- wc.lpszMenuName = MAKEINTRESOURCE(1);
- wc.lpszClassName = MainClassName;
- wc.hIconSm = (HICON)LoadImage(GetModuleHandle(NULL), MAKEINTRESOURCE(0), IMAGE_ICON, 16, 16, 0);
- if(!RegisterClassEx(&wc))
- {
- MessageBox(NULL, "Konnte das Hauptfenster nicht registrieren!", "Fehler!", MB_ICONEXCLAMATION | MB_OK);
- return 0;
- }
- // Fenster erstellen
- HWND hWnd = CreateWindowEx(
- WS_EX_OVERLAPPEDWINDOW,
- MainClassName,
- "Titletext",
- WS_OVERLAPPEDWINDOW | WS_VSCROLL | WS_HSCROLL,
- CW_USEDEFAULT, CW_USEDEFAULT, 400, 300,
- NULL,
- NULL,
- hInstance,
- NULL
- );
- // Textbox ins Fenster setzen
- HWND hEdit = CreateWindowEx(
- NULL,
- "EDIT",
- "Gib was ein",
- WS_CHILD | WS_VISIBLE | ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL,
- 0, 0, 400, 300,
- hWnd,
- NULL,
- NULL,
- NULL
- );
- // Fenster anzeigen
- ShowWindow(hWnd, iCmdShow);
- // Auf Messages reagieren
- MSG wmsg;
- while( GetMessage(&wmsg, NULL, 0, 0) )
- {
- TranslateMessage(&wmsg);
- DispatchMessage(&wmsg);
- }
- return wmsg.wParam;
- }
- HWND hEdit;
- LRESULT CALLBACK WndProc(HWND hWnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
- {
- char string[255];
- switch (iMsg)
- {
- case WM_SIZE:
- MessageBox(NULL, "noch siehst du das edit control", "noch zu sehen", MB_OK);
- hEdit = GetTopWindow(hWnd);
- MoveWindow(hEdit, 0, 0, wParam, lParam, true);
- MessageBox(NULL, "und weg ist es", "jetzt nicht mehr", MB_OK);
- break;
- case WM_CLOSE:
- DestroyWindow(hWnd);
- break;
- case WM_DESTROY:
- PostQuitMessage(0);
- return 0;
- case WM_COMMAND:
- switch(LOWORD(wParam))
- {
- case 11:
- LoadString(GetModuleHandle(NULL), 21, string, sizeof(string));
- MessageBox(hWnd, string, "Öffnen", MB_ICONINFORMATION);
- break;
- case 12:
- LoadString(GetModuleHandle(NULL), 22, string, sizeof(string));
- MessageBox(hWnd, string, "Speichern", MB_ICONINFORMATION);
- break;
- case 13:
- DestroyWindow(hWnd);
- break;
- }
- break;
- }
- // An Windows weitergeben und dessen Antwort als Rückgabewert zurück
- return DefWindowProc(hWnd, iMsg, wParam, lParam);
- }
Die letzten 2 Messageboxes sagen alles.
Der code in WM_SIZE soll für eine Breiten- und Höhenanpassung zum
top-level Fenster sorgen. Stattdessen verschwindet es einfach...
Inwiefern muss ich umdenken?