Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!
Werbeanzeige
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
#include "main.h" int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { HWND hwnd; // Fensterhandle MSG msg; // Variable für die Fenster-Messages WNDCLASSEX wnd_class; // Struktur beinhaltet die Fensterattribute LOGBRUSH background; // Logical Brush, der den Hintergrund beinhaltet wnd_class.cbSize = sizeof(wnd_class); // Größe der Klasse wnd_class.style = CS_HREDRAW | CS_VREDRAW; // Neu zeichnen beim horizontalem /vertikalem Verändern wnd_class.lpfnWndProc = WndProc; // Callback Funktion wnd_class.cbClsExtra = 0; // Keine Extras wnd_class.cbWndExtra = 0; wnd_class.hInstance = hInstance; // Instanz anpassen wnd_class.hIcon = LoadIcon(NULL, IDI_WINLOGO); // Windows-Logo setzen wnd_class.hCursor = LoadCursor(NULL, IDC_ARROW); // Std-Mauszeiger laden background.lbStyle = BS_PATTERN; // Die Bitmap kacheln background.lbHatch = (long)LoadImage(hInstance, L"3D.bmp", IMAGE_BITMAP, // und als Brush laden 0, 0, LR_LOADFROMFILE); wnd_class.hbrBackground = CreateBrushIndirect(&background); // Die Brush als Hintergrund setzen wnd_class.lpszMenuName = NULL; // Kein Menü wnd_class.lpszClassName = L"Fensterklasse"; // Name der Fensterklasse wnd_class.hIconSm = LoadIcon(NULL, IDI_WINLOGO); // Fenstericon RegisterClassEx(&wnd_class); // Die Klasse registrieren // Fenster erstellen hwnd = CreateWindow(L"Fensterklasse", // Klassenname L"Superman", // Fenstertitel WS_OVERLAPPEDWINDOW, // Window-Styles CW_USEDEFAULT, // x-Position CW_USEDEFAULT, // y-Position CW_USEDEFAULT, // x-Größe CW_USEDEFAULT, // y-Größe NULL, // Kein übergeordnetes Fenster NULL, // Kein Menü hInstance, // Instanzhandle NULL); // Keine Extra-Daten ShowWindow(hwnd, iCmdShow); // Fenster anzeigen UpdateWindow(hwnd); // Fenstermessages verarbeiten while(GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam; } LRESULT CALLBACK WndProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam) { switch(iMsg) { // Wenn der User das Fenster schließt, Quit Message abschicken case WM_DESTROY: PostQuitMessage(0); break; } return DefWindowProc(hwnd, iMsg, wParam, lParam); // Std. Messages verarbeiten } |
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 |
#include "main.h" int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { HWND hwnd; // Fensterhandle MSG msg; // Variable für die Fenster-Messages WNDCLASSEX wnd_class; // Struktur beinhaltet die Fensterattribute LOGBRUSH background; // Logical Brush, der den Hintergrund beinhaltet wnd_class.cbSize = sizeof(wnd_class); // Größe der Klasse wnd_class.style = CS_HREDRAW | CS_VREDRAW; // Neu zeichnen beim horizontalem /vertikalem Verändern wnd_class.lpfnWndProc = WndProc; // Callback Funktion wnd_class.cbClsExtra = 0; // Keine Extras wnd_class.cbWndExtra = 0; wnd_class.hInstance = hInstance; // Instanz anpassen wnd_class.hIcon = LoadIcon(NULL, IDI_WINLOGO); // Windows-Logo setzen wnd_class.hCursor = LoadCursor(NULL, IDC_ARROW); // Std-Mauszeiger laden background.lbStyle = BS_PATTERN; // Die Bitmap kacheln background.lbHatch = (HBRUSH)GetStockObject(WHITE_BRUSH); wnd_class.hbrBackground = CreateBrushIndirect(&background); // Die Brush als Hintergrund setzen wnd_class.lpszMenuName = NULL; // Kein Menü wnd_class.lpszClassName = L"Fensterklasse"; // Name der Fensterklasse wnd_class.hIconSm = LoadIcon(NULL, IDI_WINLOGO); // Fenstericon RegisterClassEx(&wnd_class); // Die Klasse registrieren // Fenster erstellen hwnd = CreateWindow(L"Fensterklasse", // Klassenname L"Superman", // Fenstertitel WS_OVERLAPPEDWINDOW, // Window-Styles CW_USEDEFAULT, // x-Position CW_USEDEFAULT, // y-Position CW_USEDEFAULT, // x-Größe CW_USEDEFAULT, // y-Größe NULL, // Kein übergeordnetes Fenster NULL, // Kein Menü hInstance, // Instanzhandle NULL); // Keine Extra-Daten ShowWindow(hwnd, iCmdShow); // Fenster anzeigen UpdateWindow(hwnd); // Fenstermessages verarbeiten while(GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam; } LRESULT CALLBACK WndProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam) { static int cxClient; static int cyClient; static int cxSource; static int cySource; static HBITMAP hBitmap; BITMAP bitmap; static HINSTANCE hInstance; HDC hdc, hdcMem; PAINTSTRUCT ps; switch(iMsg) { case WM_CREATE: // Was geschieht gleich beim Start? hInstance = ((LPCREATESTRUCT)lParam)->hInstance; hBitmap = (HBITMAP)LoadImage(hInstance, TEXT("3D.bmp"), IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE); GetObject(hBitmap, sizeof(BITMAP), &bitmap); cxSource = bitmap.bmWidth; cySource = bitmap.bmHeight; return 0; case WM_SIZE: cxClient = LOWORD(lParam); cyClient = HIWORD(lParam); return 0; case WM_PAINT: // Behandlung wenn ungültige Bereiche da sind hdc = BeginPaint(hwnd, &ps); hdcMem = CreateCompatibleDC(hdc); SelectObject(hdcMem, hBitmap); StretchBlt(hdc, 0, 0, cxClient, cyClient, hdcMem, 0, 0, cxSource, cySource, SRCCOPY); DeleteDC(hdcMem); EndPaint(hwnd, &ps); return 0; case WM_DESTROY: // ENDE DeleteObject((HBITMAP)hBitmap); PostQuitMessage(0); return 0; return DefWindowProc(hwnd, iMsg, wParam, lParam); // Std. Messages verarbeiten } |
Zitat von »"Stefan L"«
Ich hab das so gemacht is aber sicher nicht die beste Lösung:
C-/C++-Quelltext |
|
1 2 3 4 |
case WM_SIZE: cxClient = LOWORD(lParam); cyClient = HIWORD(lParam); return 0; |
Werbeanzeige