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 cpp

    in 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 😉



  • @peterchen
    Danke, das hat mir sehr geholfen

    MfG

    Freudi



  • 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?





  • 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. 🙂


Anmelden zum Antworten