Transparenter Dialog

tomsk78

Grünschnabel
Hallo!
Ich habe ein kleines Problem. Und zwar benutze ich in meiner Anwendung ein TabControl-Element. Den fühle ich mit von mir erstellten Dialogen, von CDialog abgeleitet. Wie kann ich diese Dialoge transparent machen, damit sie sich von der Farbe des TabControls nicht unterscheiden.
Danke im Voraus!
 
Gib dem Dialog den gleichen Hintergrund, den er auf dem TabControl verdeckt. Bei einem einfarbigen TabControl musst du eigentlich nur den Dialog und die darauf liegenden Controls entsprechend einfärben.

Gruß
MCoder
 
Danke für die schnelle Antwort!
Leider ist die Hintergrundfarbe des TabControls standartmäßig nicht eintonig. Die wird von oben nach unten immer dunkler. Man könnte natürlich die Hintergrundfarbe ändern, aber geht es nicht anders - halt Dialog transparent zu machen?
 
Leider gibt es bei der MFC oder WIN32-API keine Funktion oder Einstellung, mit der man mal schnell Transparenz aktivieren kann. Du musst den Hintergrundbereich des TabControls, der durch den Dialog verdeckt wird, zunächst in ein Bitmap kopieren und dieses dann wieder auf den Dialog zeichnen.

Gruß
MCoder
 
Hi, im Eigenschafts-Fenster des Dialog gibt es einen Punkt "Transparenz". Damit kann man den Hintergrund transparent machen. Vielleicht ist es ja das, was du suchst.

Mfg

langer
 
Die Option "Transparenz" hat nichts mit dem Erscheinungsbild des Dialogs zu tun,
sonder was mit der Art wie bestimmte Ereignisse gehandled werden - ganz genau weis
ich das jetzt auch nicht - ist auch egal.
Der Effekt des Verlaufs im Hinergrund ist das ganze neue Effektegedöhns ab WinXP.

Die folgende Funktion z.B. global eingefügt und in "OnInitDialog( GetSafeHwnd() )" aufgerufen sollte das problem lösen:

PHP:
//-------------------------------------------------------------------------------------------------
//--- Use: enables the XP-Style Dialog Background - for example for property pages in an tab ctrl -
// constant string definitions here (or you can put it into resource string table)
#define IDS_UTIL_UXTHEME        "UxTheme.dll"
#define IDS_UTIL_THEMETEXTURE   "EnableThemeDialogTexture"
/////////////////////////////////////////////////////////////////////////////
void EnableThemeDialogTexture(HWND hwndDlg)
{
	HINSTANCE hDll=LoadLibrary(CString((LPCTSTR)IDS_UTIL_UXTHEME));							// 'UxTheme.dll'
	if( hDll==NULL )
		return;	// the DLL won't be available on anything except Windows XP

	ULONG (PASCAL *lpfnEnableTheme)(HWND, DWORD);

	(FARPROC&)lpfnEnableTheme=GetProcAddress(hDll,CString((LPCTSTR)IDS_UTIL_THEMETEXTURE));	// 'EnableThemeDialogTexture'

	if(lpfnEnableTheme)
		lpfnEnableTheme(hwndDlg, 6);		// ETDT_ENABLETAB = (ETDT_ENABLE | ETDT_USETABTEXTURE) = (2|4) = 6
	else
		ASSERT(FALSE);

	FreeLibrary(hDll);
}

(hatte ich mal irgendwo gefunden - ist also nich von mir)
 
Zuletzt bearbeitet:
Hi,

die Option Transparenz bestimmt sehr wohl, dass der Dialog transparent gezeichnet wird. Allerdings wurden (bei meinem Testund VS 2005/XP) auch die Steuerelemente transparent und erst nach überfahren mit der Maus wieder gezeichnet. Ob sich das ändern läßt (weil ja wohl unsinnig) hab ich noch nicht probiert.

Mfg

langer
 
Zurück