Einfaches Bild darstellen



  • 404 - NOT FOUND.
    ich hab geguckt. da finde ich nix.
    kann mir jemand helfen.
    *bettel*
    thx.





  • thx thx dafür.
    aberr das erscheint mir komig.
    wollte ich nicht einfach ein Bild TRANSPARENT in das LayeredWindow BLITTEN?

    ach kommt leute! helft mir
    thx.



  • WS_POPUP?

    WS_OVER... -> WS_EX_TOPMOST|WS_POPUP (im Aufruf von CreateWindowEx())



  • Ich denke eine andere Möglichkeit wäre besser:
    man braucht kein fenster/wm_paint ect...
    man braucht nur GetHDC(0)/GetDesktopWindow().
    Dann kann man in der WInmain:

    while (1)
    {
    
    }
    

    aber wie lautet de Code, um ein Bild anzuzeigen.
    Und wie kann ich das Bild in eine Resource der ExE stecken? (VC++2005E)

    thx thx!!



  • Ob das ohne Fenster allerdings 'besser' ist, ist wie immer Geschmackssache, ich sehe das nicht so.

    Script-Styler schrieb:

    aber wie lautet de Code, um ein Bild anzuzeigen.
    Und wie kann ich das Bild in eine Resource der ExE stecken? (VC++2005E)

    Wie der Code lautet? Ist ja wohl n Scherz, dachte Du wolltest das Programm schreiben...: Du musst das Bild ins Programm laden (LoadImage/LoadBitmap) es in einen Speicherkontext einsetzen (SelectObject) und anschließend auf den Gerätekontext blitten (BitBlt). Vergiss das Aufräumen nicht :p .

    Da die VC++ 2005 Express Edition keinen Resourcen Editor hat, brauchst Du einen Externen, siehe dazu im 1. Thread dieses Forums.



  • thx thx!!!!

    aber was ist daran falsch:
    ich hab nur die windows.h includiert.

    {
    	HDC dc = GetDC(0);
    	HDC dcMem = CreateCompatibleDC(dc);
    
    	RECT rect;
    	GetClientRect(GetDesktopWindow(),&rect);
    
    	HBITMAP hBitmap = (HBITMAP)LoadImage(NULL,
    										"crate.bmp",
    										IMAGE_BITMAP,
    										0, 0,
    										LR_LOADFROMFILE);
    
    	HBITMAP hBitmapOld = (HBITMAP)SelectObject(dcMem,hBitmap);
    
    	BITMAP bitmap;
    	GetObject(hBitmap,sizeof(bitmap),&bitmap);
    
    	DWORD start = GetTickCount();
    	DWORD now = start;
    	while ((now - start <= ms) && (now >= start))
    	{
    		BitBlt(dc, 5, 5,
    				bitmap.bmWidth, bitmap.bmHeight,
    				dcMem,
    				0, 0,
    				RCCOPY);
    		Beep(880,1);
    		now = GetTickCount();
    	}
    
    	DeleteObject(hBitmap);
    	DeleteObject(dcMem);
    
    	InvalidateRect(0, NULL, TRUE);
    	UpdateWindow(GetDesktopWindow());
    	return 0;
    }
    

    So, jetzt macht er bei dem letzten parameter von BitBlt halt.
    warum?
    thx.
    ps: wie verwende ich die resourcen?



  • thx thx!!!!

    aber was ist daran falsch:
    ich hab nur die windows.h includiert.

    {
    	HDC dc = GetDC(0);
    	HDC dcMem = CreateCompatibleDC(dc);
    
    	RECT rect;
    	GetClientRect(GetDesktopWindow(),&rect);
    
    	HBITMAP hBitmap = (HBITMAP)LoadImage(NULL,
    										"crate.bmp",
    										IMAGE_BITMAP,
    										0, 0,
    										LR_LOADFROMFILE);
    
    	HBITMAP hBitmapOld = (HBITMAP)SelectObject(dcMem,hBitmap);
    
    	BITMAP bitmap;
    	GetObject(hBitmap,sizeof(bitmap),&bitmap);
    
    	DWORD start = GetTickCount();
    	DWORD now = start;
    	while ((now - start <= ms) && (now >= start))
    	{
    		BitBlt(dc, 5, 5,
    				bitmap.bmWidth, bitmap.bmHeight,
    				dcMem,
    				0, 0,
    				RCCOPY);
    		Beep(880,1);
    		now = GetTickCount();
    	}
    
    	DeleteObject(hBitmap);
    	DeleteObject(dcMem);
    
    	InvalidateRect(0, NULL, TRUE);
    	UpdateWindow(GetDesktopWindow());
    	return 0;
    }
    

    So, jetzt macht er bei dem letzten parameter von BitBlt halt.
    warum?
    thx.
    ps: wie verwende ich die resourcen?



  • RCCOPY gibts nicht, SRCCOPY 😉

    Bild aus Resource laden: Siehe LoadImage() oder LoadBitmap() Doku!
    Möglicherweise auch interessant: http://www.winprog.org/tutorial/resources.html



  • so jetzt gehts!
    aber wie bekomme ich den Hintergrund (weiß) transparent?

    {
    	HDC dc = GetDC(0);
    	HDC dcMem = CreateCompatibleDC(dc);
    
    	RECT rect;
    	GetClientRect(GetDesktopWindow(),&rect);
    
    	HBITMAP hBitmap = (HBITMAP)LoadImage(NULL,
    										"crate.bmp",
    										IMAGE_BITMAP,
    										0, 0,
    										LR_LOADFROMFILE);
    
    	HBITMAP hBitmapOld = (HBITMAP)SelectObject(dcMem,hBitmap);
    
    	BITMAP bitmap;
    	GetObject(hBitmap,sizeof(bitmap),&bitmap);
    
    	DWORD start = GetTickCount();
    	DWORD now = start;
    	while ((now - start <= ms) && (now >= start))
    	{
    		BitBlt(dc, (rect.right-rect.left-bitmap.bmWidth)/2, (rect.bottom-rect.top-bitmap.bmHeight)/2,
    				bitmap.bmWidth, bitmap.bmHeight,
    				dcMem,
    				0, 0,
    				SRCCOPY);
    		Beep(880,1);
    		now = GetTickCount();
    	}
    
    	DeleteObject(dcMem);
    	DeleteObject(hBitmap);
    
    	InvalidateRect(0, NULL, TRUE);
    	UpdateWindow(GetDesktopWindow());
    	return 0;
    }
    




  • error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__imp__TransparentBlt@44" in Funktion ""public: int __thiscall CAction::DisplayImage(int)" (?DisplayImage@CAction@@QAEHH@Z)".

    was ist da los??



  • sry code vergessen.

    {
    	HDC dc = GetDC(0);
    	HDC dcMem = CreateCompatibleDC(dc);
    
    	RECT rect;
    	GetClientRect(GetDesktopWindow(),&rect);
    
    	HBITMAP hBitmap = (HBITMAP)LoadImage(NULL,
    										"crate.bmp",
    										IMAGE_BITMAP,
    										0, 0,
    										LR_LOADFROMFILE);
    
    	HBITMAP hBitmapOld = (HBITMAP)SelectObject(dcMem,hBitmap);
    
    	BITMAP bitmap;
    	GetObject(hBitmap,sizeof(bitmap),&bitmap);
    
    	DWORD start = GetTickCount();
    	DWORD now = start;
    	while ((now - start <= ms) && (now >= start))
    	{
    /*		BitBlt(dc, (rect.right-rect.left-bitmap.bmWidth)/2, (rect.bottom-rect.top-bitmap.bmHeight)/2,
    				bitmap.bmWidth, bitmap.bmHeight,
    				dcMem,
    				0, 0,
    				SRCCOPY);
    */		TransparentBlt(dc,
    					   (rect.right-rect.left-bitmap.bmWidth)/2,
    					   (rect.bottom-rect.top-bitmap.bmHeight)/2,
    						bitmap.bmWidth, bitmap.bmHeight,
    						dcMem,
    						0, 0,
    						bitmap.bmWidth, bitmap.bmHeight,
    						RGB(255,255,255));
    		Beep(880,1);
    		now = GetTickCount();
    	}
    
    	DeleteObject(dcMem);
    	DeleteObject(hBitmap);
    
    	InvalidateRect(0, NULL, TRUE);
    	UpdateWindow(GetDesktopWindow());
    	return 0;
    }
    


  • Probier mal "GdiTransparentBlt (...)".



  • wie geht nicht.
    "GdiTransparentBlt": Bezeichner wurde nicht gefunden.
    thx.



  • TransparentBlt

    Requirements
    Windows NT/2000/XP: Included in Windows 2000 and later.
    Windows 95/98/Me: Included in Windows 98 and later.
    Header: Declared in Wingdi.h; include Windows.h.
    Library: Use Msimg32.lib.

    Tipp: Schau dir den letzten Punkt der Anforderungen an.



  • na und ?
    was muss ich denn mit der Libery machen?
    danke.



  • Dem Linker bekanntmachen. Hast ja ein "error LNK2019". Eventuell so :

    #pragma comment(lib, "Msimg32.lib")
    

    Das ist allerdings kein WinAPI-Problem.
    😞



  • was soll ich tun?
    muss ich die libery hinzufügen?



  • thx thx mit dem #pragma!
    jetzt geht das suppi!


Anmelden zum Antworten