Fenster Hintergrund ändern?
-
Äh - indem du WM_PAINT bearbeitest und dort dann den Hintergrund mit dem gewünschten Brush zeichnen lässt...?
-
Ok danke, aber ich bin noch ein kompletter Noob, wie lade ich mir WM_PAINT ein Bild?
MFG
FERNman
-
Naja, die WM_PAINT bekommt dein Programm, wenn das Fenster ganz oder teilweise neugezeichnet werden muss. Normalerweise reagierst du mit dem Aufruf von BeginPaint() und EndPaint(), und dazwischen setzt du deinen Brush mit dem Bitmap in den DC ein (SelectObject()) und zeichnest es (PatBlt()).
Und auf deinen Knopfdruck reagierst du halt, indem du dein Bitmap als Brush bereitstellst und über InvalidateRect() das Neuzeichnen erzwingst.
-
Also, danke für deine Antwort. Aber ich komme nicht weiter mit Google / MSDN...
Ich habe jetzt ein bisschen eben gestöbert und das gefunden:
typedef struct tagPAINTSTRUCT { HDC hdc; BOOL fErase; RECT rcPaint; BOOL fRestore; BOOL fIncUpdate; BYTE rgbReserved[32]; } PAINTSTRUCT, *PPAINTSTRUCT;
Und in der WindowProc:
case WM_PAINT: { BeginPaint(hWnd, PPAINTSTRUCT); HGDIOBJ SelectObject( HDC hdc, LoadImage(hInst, x); BOOL PatBlt( HDC hdc, int nXLeft, int nYLeft, GetSystemMetrics(SM_CYSCREEN), GetSystemMetrics(SM_CYSCREEN, DWORD dwRop ); EndPaint(hWnd, *PPAINTSTRUCT); }
Aber das ist alles falsch, und wie mache ich das nun richtig?
MFG und vielen vielen Dank für deine Hilfe
FERNman
-
FERNman schrieb:
Und in der WindowProc:
Du kennst schon so ein bisschen die Syntax von C/C++? Wenn nicht, hol dir erstmal ein gutes Einsteigerbuch und vergiss die WinApi.
-
??
-
Ich glaube nicht, dass du wirklich intensiv gesucht hast oder überhaupt die Grundlagen der Sprache verstehst.
Wahrscheinlich kannst du auch besser suchen, wenn du weißt, wonach genau, also empfehle ich dir hier erstmal: lern die Sprache erstmal richtig, bevor du mit komplizierteren APIs arbeitest.
-
-
Das Programm hinter dem Link kommt mir i-wie bekannt vor. Vielleicht von Petzold?
-
So, ich habs hinbekommen
Zwar schon vor ein paar Tagen, aber erst heute habe ich mal wieder die Zeit gefunden ins Forum zu sehen und etwas zu schreiben...Also, vielleicht hilft es irgendwann irgendwem:
case WM_PAINT: { hdc = BeginPaint(hWnd1, &ps); bmpExercising = (HBITMAP)LoadImage(NULL, Background, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE); // Create a memory device compatible with the above DC variable MemDCExercising = CreateCompatibleDC(hdc); // Select the new bitmap SelectObject(MemDCExercising, bmpExercising); // Copy the bits from the memory DC into the current dc BitBlt(hdc, 0, 0, GetSystemMetrics(SM_CXSCREEN), GetSystemMetrics(SM_CYSCREEN), MemDCExercising, 0, 0, SRCCOPY); // Restore the old bitmap DeleteDC(MemDCExercising); DeleteObject(bmpExercising); RedrawWindow(hWnd1, NULL, NULL, RDW_ERASENOW | RDW_ALLCHILDREN | RDW_INVALIDATE); DeleteObject(hWnd1); EndPaint(hWnd1, &ps); }break;
Und jedes mal, wenn man den Hintergrund ändern möchte, einfach Background = "" und RedrawWindow()...
MFG und Danke an alle
FERNman