Design



  • Wie kann ich in meiner MFC-Anwendung die Hintergrundfarbe und die Textfarbe ändern?
    In der OnPaint() ?

    Bitte gut erklären, bin in dieser Hinsicht noch Anfänger!

    MfG,
    D.Derigs



  • Wenn du mit einer Dialogbasierten anwendung arbeitest,
    musst du in der InitInstance() deiner CDEINPROJEKTApp Klasse
    den folgenden COde einfügen:

    // Erste RGB bezieht sich auf BackGround zweite auf Schrift
    SetDialogBkColor(RGB(21,197,67),RGB(212,212,214)); 
    // Das wäre z.b. ein Brün als BG.
    


  • Was ist zu includieren?



  • Wieso, ist ne standart Funktion. MSDN!

    Sollte so funzen, hat es bei mir auch immer!



  • D.Derigs schrieb:

    Was ist zu includieren?

    Was ein Wort: "includieren" 😃

    SetDialogBkColor ist AFAIR eine Memberfunktion von CWinApp.



  • Und wird nicht funktionieren...[h]![/h]
    Hatten wir das Thema nicht schon vor ein paar Wochen ?



  • Samma wollt ihr mich ver*******? In ner Dialog basierten anwendung, also nicht SDI oder MDI, funktioniert das bei mir bestens! Und das hab ich bestimmt in 6 ANwendungen laufen. 😡



  • Geht wirklich nicht!
    PS: Ich hab Visual Studio 2003
    bei Visual C++ 6 geht angeblich, aber nicht bei der neuen Version



  • Hab sowas mit OnCtlColor() gelesen, aber das was in der MSDN und im FAQ steht verstehe ich nicht!
    In meinem Projekt gibts keine OnCtlColor() !
    Kann mir das jemand verständlich erklären?



  • Hab was gehört von WM_CTLCOLOR:

    if (pWnd->GetDlgCtrlID() == ID_DEINES_STATICS)
        {
            pDC->SetTextColor(RGB(0,0,2550)); // Setzt die Textfarbe auf blau
            HBRUSH hBrush = CreateSolidBrush(RGB(255,0,0)); //Setzt die Hintergrundfarbe auf rot
            return (HBRUSH) hBrush;
        }
    

    Soweit,sogut!
    Nur wo und wie einzusetzen?



  • Die OnCtlColor() musst du mit dem ClassWizard erstellen...

    Hier gabs das Problem mit dem Färben schonmal...
    http://www.c-plusplus.net/forum/viewtopic.php?t=94714&highlight=setdialogbkcolor

    Gruß
    :: NoName ::



  • Was genau mit dem ClassWizard?
    habe da z.B.:
    MFC Class
    MFC Class from TypeLib
    .............

    Was muss ich machen?



  • Naja, du klickst in deinem Projekt auf 'View' > "ClassWizard'.
    In der ComboBox achtest du darauf, dass dort deine Klasse eingetragen ist also 'CDeineKlasseDlg'
    In der darunterliegenden ListBox siehst du Messages und dort suchst du dir die WM_CTLCOLOR raus...

    Hoffe du meinst das..

    Gruß
    :: NoName ::



  • Ich habe unter View kein ClassWizard
    PS: Visual Studio 2003 Enterprise Architect



  • Ich will ja nur die OnCtlColor() erstellen, und wissen wie man die bedient!



  • Hmm, bei Visual Studio 2003 kenn ich mich leider nicht aus. Aber irgendwo muss
    der ClassWizard vorhanden sein, such mal danach in allen Menüpunkten.

    Gruß
    :: NoName ::



  • Es gibt nur 'Add Class...' aber keinen 'ClassWizard', hab in allen Menüpunkten und fast allen Kontextmenüs gesucht...



  • Hmm, dann musst du die WM_CTLCOLOR wohl manuell hinzufügen:

    1. Füge in deiner CTestDlg.h folgenden Eintrag unter allen afx_msg's über der Message Map ein
    afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor);
    
    1. Füge diesen Code in deiner CTestDlg.cpp ein
    HBRUSH CTestDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
    {
    	HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
    
    	// TODO: Change any attributes of the DC here
    
    	// TODO: Return a different brush if the default is not desired
    	return hbr;
    }
    

    Dann noch alles kompilieren und weiterproggen 🤡

    Gruß
    :: NoName ::



  • Und was kann man da jetzt reinschreiben und was hat das für eine Wirkung?
    (Nur der Komplettierung halber!!)

    MfG,
    D.Derigs



  • Ist es so in der Headderdatei richtig?
    [cpp]
    // X-CryptDlg.h : Headerdatei
    //

    #pragma once
    #include "afxwin.h"
    #include "afxcmn.h"

    class CXCryptDlgAutoProxy;

    // CXCryptDlg Dialogfeld
    class CXCryptDlg : public CDialog
    {
    DECLARE_DYNAMIC(CXCryptDlg);
    friend class CXCryptDlgAutoProxy;

    // Konstruktion
    public:
    CXCryptDlg(CWnd* pParent = NULL); // Standardkonstruktor
    virtual ~CXCryptDlg();

    // Dialogfelddaten
    enum { IDD = IDD_XCRYPT_DIALOG };

    protected:
    virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV-Unterstützung

    // Implementierung
    protected:
    CXCryptDlgAutoProxy* m_pAutoProxy;
    HICON m_hIcon;

    BOOL CanExit();

    // Generierte Funktionen für die Meldungstabellen
    virtual BOOL OnInitDialog();
    afx_msg void OnPaint();
    afx_msg HBRUSH OnCtlColor(CDC pDC, CWnd pWnd, UINT nCtlColor);**
    afx_msg HCURSOR OnQueryDragIcon();
    afx_msg void OnClose();
    virtual void OnOK();
    virtual void OnCancel();
    DECLARE_MESSAGE_MAP()
    public:
    afx_msg void OnBnClickedButton1();
    afx_msg void OnBnClickedButton2();
    afx_msg void OnEnChangeEdit3();
    CEdit mkey;
    afx_msg void OnBnClickedButton3();
    afx_msg void OnBnClickedButton4();
    afx_msg void OnBnClickedButton8();
    afx_msg void OnNMCustomdrawStatus(NMHDR *pNMHDR, LRESULT *pResult);
    CProgressCtrl mstatus;
    CStatic micon;
    CButton mbutton;
    afx_msg void OnStnClickedKeycr();
    CStatic m_static;
    };
    [/cpp]


Anmelden zum Antworten