Hintergrundfarbe von CDialog setzen
-
Versuch es mal mit SetBkColor(...) in der OnInitDialog() - Funktion.
-- mein Fehler, funktioniert nicht. --
-
Du musst die Funktion aufrufen bevor du den Dialog öffnest aufrufst.
Ich meinte die InitInstance Methode deiner von CWinApp abgeleiteten Klasse
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vcmfc98/html/_mfc_cwinapp.3a3a.setdialogbkcolor.asp
-
Sonst kannst du auch auf die WM_CTLCOLOR message reagieren.
//in der Headerdatei eine Membervariable vom Typ CBrush erstellen CBrush m_brDialog; // im Konstruktor m_brDialog.CreateSolidBrush(RGB(255,0,0)); // in der OnCtlColor() HBRUSH CTMyDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) { HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor); if (nCtlColor == CTLCOLOR_DLG) { return (HBRUSH)m_brDialog.GetSafeHandle(); } else return hbr; }
-
Hab jetzt der Reihe nach mal alle Vorschläge durchprobiert, aber in keinem Fall erfolgreich... Das Fenster bleibt stur hellgrau. :p
-
Wirklich. Den Vorschlag, den ich vorhing gepostet habe, habe ich extra ausprobiert. Zeig mal den Quellcode deiner WM_CTLCOLOR - Methode.
-
Du kannst auch OnClear() überschreiben und dort mit dem Hintergrund machen, was du willst. Z.B. ein Bild zeichnen, Farbverlauf usw.
-
Paul_C. schrieb:
Wirklich. Den Vorschlag, den ich vorhing gepostet habe, habe ich extra ausprobiert. Zeig mal den Quellcode deiner WM_CTLCOLOR - Methode.
Bei mir bin ich ebenfalls sicher das dies bei einer Dialoganwendung funktioniert, da ich dies selbst verwendet habe.
Zeig mal dein Code wie du es versucht hast

Alternativ kannst du hier noch vorbeischaun...
http://www.coding-help.de/dialoge_allg.html#Farbiger_Dialog
-
Na endlich, der Eintrag von "ON_WM_CTLCOLOR()" in der richtigen Message-Map hat noch gefehlt...

BEGIN_MESSAGE_MAP(CJSI_INI_FrontendDlg, CDialog) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_CTLCOLOR() ON_WM_QUERYDRAGICON() //}}AFX_MSG_MAP ON_COMMAND(ID_Settings, OnSettings) ON_NOTIFY(LVN_ITEMCHANGED, IDC_LIST1, OnLvnItemchangedList1) ON_BN_CLICKED(IDC_BUTTON1, OnBnClickedButton1) ON_BN_CLICKED(IDC_BUTTON2, OnBnClickedButton2) END_MESSAGE_MAP()( Den Klassenassistenten, so wie er in div. Literatur erklärt wird, finde ich im Visual C++ .NET (2003), in dem ich hier praktiziere, nicht mehr. Über den sollte es ja laut meinem Schmöker hier recht einfach sein, den Nachrichtenverkehr von Klassen zu regeln. Ist der rausgeflogen? Werden diese Nachrichten-Geschichten inkl. Message-Maps heutzutage ausschließlich manuell geführt oder gibts da andere Techniken? Wobei ich das nächste Mal, wenn auf eine Nachricht nicht reagiert wird, da natürlich zuerst mal nachschauen würde, aber vielleicht lässt sich da ja was Eleganteres angewöhnen, sodass man gar nicht erst nachschauen muss.
)
-
Jein, der ist/ ist nicht rausgeflogen.
Wenn du deine ...dlg.cpp geöffnet hast, dann kannst du unter Einstellung (F4) auf das Symbol rechts vom Blitz klicken und erhältst eine Liste aller Nachrichten.
Dann kannst du anhand der DropDown-List <Hinzufügen> auswählen.

-
Macht mal eher eine Bitabfrage rein:
HBRUSH Cxxx::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) { if(nCtlColor & CTLCOLOR_STATIC) { // Set the static text to white on blue. pDC->SetTextColor(RGB(0, 0, 0)); pDC->SetBkColor(0xFFFFF0); // Drop through to return the background brush. } if(nCtlColor & CTLCOLOR_DLG){return m_BackBrush;} return CDialog::OnCtlColor(pDC, pWnd, nCtlColor); }der Brush in der Init sollte auch auf dieselbe Farbe z.B. hier 0xFFFFF0
gesetzt werden.