Hintergrundfarbe meines Dialogfeldes
-
Hallo,
Wie bekomme ich die Hintergrundfarbe meines Dialogfeldes heraus? Danke im voraus.MfG
Freudi
-
freudi schrieb:
Hallo,
Wie bekomme ich die Hintergrundfarbe meines Dialogfeldes heraus? Danke im voraus.MfG
Freudi
im heder
CBrush m_b;
im cppin OnInitDialog()
m_b.CreateSolidBrush(RGB(220,220,255));//zB
und dann
HBRUSH lala::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) { HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor); // .....und Maske ganzwenig Farben geben switch (nCtlColor) { case CTLCOLOR_STATIC: // Für alle Statics pDC->SetTextColor(0); pDC->SetBkColor(RGB(220,220,255)); case CTLCOLOR_DLG: // Für den Dialog return (HBRUSH)m_rezeptbrush; default: return CDialog::OnCtlColor(pDC, pWnd, nCtlColor); } // TODO: Anderen Pinsel zurückgeben, falls Standard nicht verwendet werden soll return hbr; }
-
Hallo,
Danke erstmals. Ich will aber nicht die Hintergrundfarbe meines Dialogfeldes ändern, sondern nur die Hintergrundfarbe meines Dialogfeldes abfragen.
-
Hallo,
das ist leider etwas schwieriger, da der Hintergrund deines Dialogfeldes von den eingestellten Systemfarben abhängt.
Du könntest also die Systemfarben abfragen und die richtige Farbe heraussuchen oder dein Fenster mit WM_PRINT rendern und dann die Farbwerte eines Pixels abfragen (vergiss mein 2. Vorschlag wieder, ist ziemlich unsicher und dirty).Grüße Raphael
-
Hallo,
Und wie funktioniert dann das bitte?
-
Kann mir keiner helfen??
-
Die "Standardfarbe" bekommst du mit GetSysColor(COLOR_3DFACE) heraus. Und wenn du's nicht geändert hast, dann ist das ja die richtige
-
-
Hallo freudi,
es gibt eine einfache Methode, Deiner Anwendung ein von Dir gewähltes
Aussehen zu geben.Male Dir zuerst mal mit einem Paintprogramm Dein Hintergrundbild und
speichere es als Windows BMP Image irgendwo ab.
Für ein 800*600 Fenster sollte es 795 Pixel breit und 539 Pixel hoch
sein.Dann erstelle eine Dialogfeld-Anwendung und lösche alle Schaltflächen.
Als nächstes installierst Du eine Picture Control-Schaltfläche und
schiebst sie in die linle obere Ecke.
Damit kein Rand sichtbar ist, mußt Du die Randlinien des Fensters ganz
an den Rand schieben.Nun gehe in die Ressoursenansicht und klicke rechts auf den obersten
Knoten (den der mit .rc* endet).Im erscheinenden Fenster wählst Du Ressource hinzufügen, dann Bitmap und
dann Importieren.
Es erscheint ein Fenster, mit dem Du Dein Bild laden kannst.Nun gehst Du ins Eigenschaftenfenster der Picture Control Schaltfläche
und stellst unter Typ Bitmap ein und unter Bild IDB_BITMAP 1 (in dieser
Reihenfolge).
Das war es, wenn Du jetzt Deine Antwort erstellst und startest hat das
Dialogfeld das Aussehen Deines Bildes.Die ganze Sache hat nur einen Haken. Schaltflächen kannst Du erst plazieren,
wenn das Bild installiert ist.Gruß
Günter
-
Ich habe jetzt schon einiges probiert und schon einige Threads gelesen, aber ich bin noch nicht dahinter gekommen wie ich die Funktion aufrufe.
Denn bei mir tut sich gar nix.
Vielleicht könnt ihr mir helfen, denn ich bin ein absoluter Newbee!
Danke!
-
@Elayas: Welche Funktion denn?
-
OnCtlColor.
Sie wird bei mir nicht aufgerufen.
-
Fehlt bestimmt der entsprechende eintrag in der Message Map des Dialogs.
bin ein absoluter Newbee!
Vielleicht mal das Scribble-Tutorial durcharbeiten, da lernt man einiges
-
Vielleicht mal das Scribble-Tutorial durcharbeiten
Was ist das und wo findet man es?
-
Oder entsprechend in der lokalen MSDN
-
peterchen schrieb:
Fehlt bestimmt der entsprechende eintrag in der Message Map des Dialogs.
Das Problem ist, dass bei allen Beiträgen hier im Forum, diese Einträge nicht spezifiziert werden.
Es wäre nett, wenn Du mir ein Beispiel aufschreiben könntest - auch für die, die diesen Beitrag sonst noch so lesen - oder mir meinen Fehler sagen.
In meinem Code sieht es wie folgt aus:
// Fast identisch mit dem Beispiel aus der MSDN HBRUSH CVFormularDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) { HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor); // IDC_HUND1_VENDE ist ein CEdit-Feld mit einer Ctrl-Variablen m_ctrlVEnde und einem Value m_strVEnde if (pWnd->GetDlgCtrlID() == IDC_HUND1_VENDE) { pDC->SetTextColor(RGB(255, 0, 0)); // Ich hätte gerne die Schrift rot hbr = m_Brush; // Im OnInitDialog: m_Brush.CreateSolidBrush(RGB(0,255,0)); } return hbr; }
Frage: Wie bekomme ich den pDC und den pWnd?
Danke!
-
Es wäre nett, wenn Du mir ein Beispiel aufschreiben könntest
Hab ich nicht gemacht, weil ich eigentlich wollte das du *lernst* a) was die Message Map macht und b) wie du da was (evtl. manuell) hinzufügst und c) am besten diese Info alleine z.B. aus der MSDN oder einem anderen Tutorial gewinnst
ansonsten sieht die Message Map z.B. so aus (im .cpp):
BEGIN_MESSAGE_MAP(CMyDialog, CDialog) //{{AFX_MSG_MAP(CMyDialog) ON_WM_CTLCOLOR(OnCtlColor) END_MESSAGE_MAP()
-
Danke,
Du hast mir sehr weitergeholfen!
Gelernt habe ich auch, denn bevor ich den Beitrag gepostet habe, hatte ich schon drei Stunden ausprobiert, MSDN gelesen und Forum durchsucht.