Einfaches Bild darstellen
-
Hi@aLL.
ich möchte ein einfaches bild in der Mitte des Bildschirms darstellen.
Allerdings soll das Bild ohne Fenster und wenn möglich mit transparentem Hintergrund erscheinen.Danke.
-
juhhu, darf ich noch mal ran...
du erstellst ein fenster mit dem style WS_POPUP, machst einen auf SetLayeredWindowAttributes (..) (siehe msdn) und blittest wunderschön dein bild (das du vorher mit LoadImage () geladen hast) auf das Fenster...Mfg Ominion
-
jo.
aber gibte da nich ne einfachere variante in c++?
also ich mein, ich hab jetzt ne winmain....
Winmain...
{
...
}
...könntest du mir n beispiel geben.
und wie kann ich das bild ein - aus blenden.thx.
-
Script-Styler schrieb:
aber gibte da nich ne einfachere variante in c++?
also ich mein, ich hab jetzt ne winmain.Tzzzzzz...immer das Gleiche: 'einfacher'... da bist Du in der WinAPI bzw. in C/C++ irgendwie falsch
.
Such mal in der MSDN (nach den Funktionen die Dir Ominion genannt hat) bzw. via google. Da gibts sicherlich etwas ;).
-
Script-Styler schrieb:
aber gibte da nich ne einfachere variante in c++?
Wieviel einfacher solls denn noch werden?
void ShowTransparentWindowAndBlitSkullGraphicsCenteredOnScreenFeaturingANiceFadeEffect()
So vielleicht?
-
Oder so ?
void MachAllesAlleine(int KeinWert);
Sry musste sein
Gruß Chris
-
Das war aber pöhse!!!!
-
naja ich ben eben etwas faul...
aber das wär doch nützlich. die WinAPI hat doch sonst so viele Funktionen...
wenn es was einfacheres gibt - warum das umstendlichere nehmen?thx.
-
Wie alt bist du?
Achso: Probiers mal mit dem Programm hier:
#include <windows.h> #include <winstyles.h> int win_style = IMG_ONLY; //Nur Bild #define background_name test.bmp //Test.bmp als HG laden //... //(In WINMAIN) openwindow(winstyle, load(background_name));
-
naja leudde.
ich habe jetzt ein supi transparentes window erstellt.
aber wie krich ich den ramen weg und die titelbar?
thx.// At first define for including the windows headers #define _WIN32_WINNT 0x0500 #include <windows.h> // The Window Procedure LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { switch (msg) { case WM_CREATE: // Set WS_EX_LAYERED on this window SetWindowLong(hwnd, GWL_EXSTYLE, GetWindowLong(hwnd, GWL_EXSTYLE) | WS_EX_LAYERED); // Make this window 70% alpha SetLayeredWindowAttributes(hwnd, 0, 255*0.5, LWA_ALPHA); break; case WM_CLOSE: DestroyWindow(hwnd); break; case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hwnd, msg, wParam, lParam); } return 0; } int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { WNDCLASSEX wc; HWND hwnd; MSG Msg; static char appName[] = "Your Application"; // Registering the Window Class wc.cbSize = sizeof(WNDCLASSEX); 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)(COLOR_WINDOW+1); wc.lpszMenuName = NULL; wc.lpszClassName = appName; wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION); if (!RegisterClassEx(&wc)) { MessageBox(NULL, "Window Registration Failed!", "Error!", MB_ICONERROR | MB_OK); return 0; } // Creating the Window hwnd = CreateWindowEx( WS_EX_CLIENTEDGE, appName, "Your Window Title", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 400, 400, NULL, NULL, hInstance, NULL); if (hwnd == NULL) { MessageBox(NULL, "Window Creation Failed!", "Error", MB_ICONERROR | MB_OK); return 0; } ShowWindow(hwnd, nCmdShow); UpdateWindow(hwnd); // The Message Loop while (GetMessage(&Msg, NULL, 0, 0) > 0) { TranslateMessage(&Msg); DispatchMessage(&Msg); } return int(Msg.wParam); }
-
Du hast bei CreateWindowEx WS_OVERLAPPEDWINDOW angegeben, und das tut was?
richtig! Es sagt, dass das fenster einen rahmen etc. haben soll.
(kann man nicht wirklich ausm namen schließen)
-
@Dennis123:
Thx.
Aber jetzt habe ich ein komplett transparentes window. (WS_EX_LAYERED).so, wie bekomme ich jetzt das in der resource liegende Bild (skull) in das Fenster, und zwar transparent (schwarz = transparent) ich habe schon überall gesearched aber nix gefunden.). muss ich den code bei WM_PAINT einbinden oder wo genau? und wie?
danke schon mal.
-
steht nich in der FAQ wie man bilder läd oder irre ich da?
-
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?