Schwarzer Dialog

Executer

Mitglied
Nabend zusammen ich bins mal wieder :)

Also ich möchte einen Dialog erzeugen, der schwarz ist. Also nicht dieses Grau wie es in VC standart ist...

Ich habe es schon versucht indem ich ein Bitmap daraufgelegt habe, aber dadurch ist die Datei unverhältnissmäßig groß geworden. Der Dialog soll nur als Hintergrund dienen.

Vielleicht weiß jemand noch einen anderen Weg sich einen schwarzen Hintergrund zu besorgen.
Allerdings möchte ich, wenn ich es nicht irgendwie vermeiden kann, kein OpenGL verwenden ;)

So ich hoff ich hab mich wenigstens halbwegs verständlcih ausgedrückt :D

Nacht und schon mal thx for help :)
 
Wenn du nur die Hintergrundfarbe zu eindeutig schwarz machen willst, bist du mit WM_ERASEBKGND (bzw. OnEraseBkGnd) am besten aufgehoben.

Einfach ein FillSolidRect (MFC) oder FillRect (Win32) mit Schwarz und dann return TRUE.
 
Hallo

Du kannst auch die Message WM_CTLCOLOR abfangen


Code:
HBRUSH CMyDialog::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);

.
.
.
.
  switch (nCtlColor)
  {
        case CTLCOLOR_DLG:
                hbr = (HBRUSH)(m_brush.GetSafeHandle());
	break;
        default:
                break;
  }
.
.
.
  return hbr;
}

im Konstruktor
.
.
.
m_brush.CreateSolidBrush(RGB(0,0,0,);
.
.

Viel Glück
 
Zuletzt bearbeitet:
Ich würde ebenfalls die Lösung über WM_CTRLCOLOR favorisierten. Allerding würde ich dieses Gefummel mitden MFC Klassen weg lassen un das letztendlich so machen:


Code:
 return ::CreateSolidBrush( RGB (0,0,0))
oder gleich
Code:
return ::CreateSolitBrush( 0 );

M.f.G. Erik
 
Danke für die Antworten. Ich hab das Prob jetzt so gelöst:

Code:
HBRUSH CTestblackdialogDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
{
	
	
	HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
	

	 switch (nCtlColor)
	{
        case CTLCOLOR_DLG:
             CBrush*     back_brush;
            COLORREF    color;
            color =(RGB(0, 0, 0));
            back_brush = new CBrush(color);
            return (HBRUSH) (back_brush->m_hObject);

		break;
        default:
                break;
	 }
	
	

	// TODO: Return a different brush if the default is not desired
	return hbr;
}

//EDIT: @Erik: Hatte deins noch gar nicht gesehn hätte mir etwas Arbeit gespart ;) Danke nochmal
MfG Executer
 
Zuletzt bearbeitet:
Vergiss nur nicht, den genewten Brush zu deleten! Das war der Hintergrund des "Gefummels" mit den MFC-Klassen, die räumen ihr GDI-Objekt selbst wieder auf.
 
Zurück