bitmap
-
Hab ich mir auch gedacht^^
Aber nebenbei: die Bmp muss nicht zwingend static sein oder? Und es wuerde reichen, wenn man sie nur in dem WM_CREATE Zweig erzeugt afaik. Nur als "Verbesserungsvorschlag"
-
das geht doch gar nicht, oder? ich hätts so gemacht:
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { static HBITMAP hBmp; HDC DC; HDC MemDC; PAINTSTRUCT ps; switch(message) { case WM_CREATE: { hBmp = LoadBitmap(hInst, "..\\test.bmp"); return 0; } case WM_PAINT: { DC = BeginPaint(hWnd, &ps); MemDC = CreateCompatibleDC(DC); SelectObject(MemDC, hBmp); BitBlt(DC, 0, 0, 0, 0, MemDC, 0, 0, SRCCOPY); EndPaint(hWnd, &ps); return 0; } case WM_CLOSE: { PostQuitMessage(0); return 0; } case WM_DESTROY: { PostQuitMessage(0); return 0; } } return DefWindowProc(hWnd, message, wParam, lParam); }
-
Also irgendwie funktionierts trozdem nicht...
scheint zwar alles richtig zu sein, aber er zeigt einfach kein bild an.mal abgesehen von den parametern 4 und 5 bei bitblt die verändert werden mussten

-
(regestrierter NULL
)Eben hab ich gemerkt das LoadBitmap bei mir NULL zurück gibt,
es funktioniert jedoch weder wenn ich den genauen pfad angebe, noch mit ..\,
noch wenn ich die exe in die directory vom bitmap kopiere und .\\ oder einfach nur
den namen vom bitmap als parameter angebe...irgendwelche ideen?
EDIT:
Jetzt hab ich mal GetLastError mit eigebaut und bekomme errorcode 1814
(The specified resource name cannot be found in the image file.)obwohl der direckte Pfad angegeben ist...

-
loadbitmap lädt von einer resource
was du brauchst ist
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/resources/introductiontoresources/resourcereference/resourcefunctions/loadimage.asp
-
soweit ich weiß nicht nur, oder?
"The MAKEINTRESOURCE macro can be used to create this value."
EDIT:
Habs mit resource versucht und des geht auch net... immernoch der selbe errorcode
-
-[NULL]- schrieb:
Habs mit resource versucht und des geht auch net... immernoch der selbe errorcode
Wie sieht denn jetzt dein LoadBitmap bzw. LoadImage-Aufruf aus und ist im ersten Fall hInst auch ein gültiges Instanz-Handle?
-
LoadBitmap() funktioniert nur mit Resourcen. Auch der Satz mit MAKEINTRESOURCE bezieht sich auf Bitmaps in Resourcen...
Mit LoadImage() sieht es so aus:
HBITMAP bmp; bmp=(HBITMAP)LoadImage(NULL,"c:\\blupp.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
-
Ha, thx... mit LoadImage funktionierts jetzt endlich...
hier nochmal der ganze quellcode... :
#include <windows.h> #include <stdio.h> #include <stdlib.h> LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); HINSTANCE hInst; int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { HWND hWnd; MSG msg; WNDCLASS wc; const char szAppName[] = "bitmapT"; wc.style = CS_HREDRAW | CS_VREDRAW; wc.lpfnWndProc = WndProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hInstance; wc.hIcon = LoadIcon(NULL, IDI_APPLICATION); wc.hCursor = LoadCursor(NULL, IDC_ARROW); wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); wc.lpszMenuName = NULL; wc.lpszClassName = szAppName; RegisterClass(&wc); hWnd = CreateWindow( szAppName, "bitmapT", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL ); ShowWindow(hWnd, iCmdShow); UpdateWindow(hWnd); hInst = hInstance; while(GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam; } LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { static HBITMAP hBmp; HDC DC; HDC MemDC; PAINTSTRUCT ps; switch(message) { case WM_CREATE: { hBmp = (HBITMAP) LoadImage(hInst, "D:\\Programme\\Microsoft Visual Studio\\MyProjects\\bitmapT\\test.bmp", IMAGE_BITMAP,0,0,LR_LOADFROMFILE); return 0; } case WM_PAINT: { DC = BeginPaint(hWnd, &ps); MemDC = CreateCompatibleDC(DC); SelectObject(MemDC, hBmp); BitBlt(DC, 0, 0, 32, 37, MemDC, 0, 0, SRCCOPY); EndPaint(hWnd, &ps); return 0; } case WM_CLOSE: { PostQuitMessage(0); return 0; } case WM_DESTROY: { PostQuitMessage(0); return 0; } } return DefWindowProc(hWnd, message, wParam, lParam); }
-
ehem... trotzdem merke ich gerade das das Bitmap sofort verschwindet
wenn ich das fenster mal minimiere oder maximiere...
obwohl BitBlt doch in WM_PAINT steht...
-
Evtl. liegt es daran, dass du MemDC in WM_PAINT nicht wieder frei gibst.
-
also, ich hab jetzt mal ReleaseDC(hWnd, MemDC); eingefügt und verändert hat sich leider nichts...
-
When you no longer need the memory DC, call the DeleteDC function.
Also DeleteDC(MemDC);

-
Danke, ich hab mich halt noch net extrem mit der winapi beschäftigt...
werd mir jetzt mal n buch kaufen...
PS.:
Es geht