Form Hintergrund Transparent



  • Hallo,

    ich benötige ein Windows Form mit ca.50% transparentem Hintergrund.
    Transparente Hintergrundfarben werden aber nicht aktzeptiert.
    Die gesamt Transparenz des Forms kann ich aber auf 50% stellen, nur wird dann das Label was in dem Form ist auch Transparent dargestellt.
    Nun meine Frage, gibt es irgendeinen "Trick" damit ich den Hintergrund transparent bekomme, und das Label nicht?

    Vielen Dank für die Mühe.



  • Zu dem Problem gibt es meines Erachtens keine triviale Lösung. Was du machen könntest, ist ein Verfahren das ich in den letzten 5 Minuten erdacht habe, einfach mal ausprobieren 🙂

    Du könntest ein Dithering mit gewünschter Dichte machen (z.b. in einer picturebox / client dock) und dann den TransparencyKey auf den durch die Dichtefunktion ausgedrücken Farbwert setzten.
    Je nach Dichte, ergibt sich dann ein gewisser Transparenzeffekt.

    http://en.wikipedia.org/wiki/Dither



  • Blödsinn, dass wird nie funktionieren...



  • Das wars?! Is das deine Premise jetzt? rofl, depp!



  • in der stdafx.h oder irgendwo global im projekt:

    # define LWA_COLORKEY 1
    # define LWA_ALPHA 2
    # define WS_EX_LAYERED 0x80000
    

    dann in deiner dialog-klasse:

    #include windows.h
    
    void CClass::SetSeeThru(int factor)
    {
    	HWND hWnd=this->m_hWnd;
    	    typedef DWORD (WINAPI *PSLWA)(HWND, DWORD, BYTE, DWORD);
    
    	PSLWA pSetLayeredWindowAttributes;
    
    	HMODULE hDLL = LoadLibrary ("user32");
    	pSetLayeredWindowAttributes = (PSLWA) GetProcAddress(hDLL,"SetLayeredWindowAttributes");
    
    	if (pSetLayeredWindowAttributes != NULL) 
    	{
    		SetWindowLong (hWnd, GWL_EXSTYLE, GetWindowLong
    		(hWnd, GWL_EXSTYLE) |WS_EX_LAYERED/*|WS_EX_TOOLWINDOW*/ );
    
    		pSetLayeredWindowAttributes (hWnd, RGB(100,100,100), factor, LWA_COLORKEY|LWA_ALPHA);
    	}
    	bAlphaBlend = ! bAlphaBlend;
    
    	FreeLibrary(hDLL);
    }
    

    int factor liegt zwischen 0 und 255 und gibt die transparenz des kompletten dialoges an. mit RGB(100,100,100) kannst du eine bestimmte farbe definieren, welche komplett transparent sein soll.


Anmelden zum Antworten