Problem mit dem Dialog färben



  • Habe so ziemlich alles gemacht, was ich finden konnte geht aber trotzdem nicht!

    // serverDlg.cpp : Implementierungsdatei
    //
    
    #include "stdafx.h"
    #include "server.h"
    #include "serverDlg.h"
    #include "DlgProxy.h"
    #include ".\serverdlg.h"
    #include <conio.h>
    #include <io.h>
    
    #ifdef _DEBUG
    #define new DEBUG_NEW
    #endif
    
    CBrush m_brush; 
    
    // CserverDlg Dialogfeld
    
    IMPLEMENT_DYNAMIC(CserverDlg, CDialog);
    CserverDlg::CserverDlg(CWnd* pParent /*=NULL*/)
    	: CDialog(CserverDlg::IDD, pParent)
    {
    	EnableActiveAccessibility();
    	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
    	m_pAutoProxy = NULL;
    }
    CserverDlg::~CserverDlg()
    {
    	// Existiert für dieses Dialogfeld ein Automatisierungsproxy, setzen Sie
    	//  seinen Gegenzeiger auf dieses Dialogfeld auf NULL, um anzuzeigen,
    	//  dass das Dialogfeld gelöscht wurde.
    	if (m_pAutoProxy != NULL)
    		m_pAutoProxy->m_pDialog = NULL;
    }
    
    void CserverDlg::DoDataExchange(CDataExchange* pDX)
    {
    	CDialog::DoDataExchange(pDX);
    }
    
    BEGIN_MESSAGE_MAP(CserverDlg, CDialog)
    	ON_WM_CLOSE()
    	ON_WM_PAINT()
    	ON_WM_QUERYDRAGICON()
    	//}}AFX_MSG_MAP
    	ON_BN_CLICKED(IDC_BUTTON1, OnBnClickedButton1)
    	ON_BN_CLICKED(IDC_BUTTON2, OnBnClickedButton2)
    END_MESSAGE_MAP()
    
    // CserverDlg Meldungshandler
    
    BOOL CserverDlg::OnInitDialog()
    {
    	CDialog::OnInitDialog();
    
    	// Symbol für dieses Dialogfeld festlegen. Wird automatisch erledigt
    	//  wenn das Hauptfenster der Anwendung kein Dialogfeld ist
    	SetIcon(m_hIcon, TRUE);			// Großes Symbol verwenden
    	SetIcon(m_hIcon, FALSE);		// Kleines Symbol verwenden
    
    	// TODO: Hier zusätzliche Initialisierung einfügen
    	m_brush.CreateSolidBrush(RGB(0, 0, 0)); // Für Schwarz 
    	SetBkColor(RGB(0, 0, 0),RGB(255, 255, 255));
    	return TRUE;  // Geben Sie TRUE zurück, außer ein Steuerelement soll den Fokus erhalten
    }
    
    // Wenn Sie dem Dialogfeld eine Schaltfläche "Minimieren" hinzufügen, benötigen Sie 
    //  den nachstehenden Code, um das Symbol zu zeichnen. Für MFC-Anwendungen, die das 
    //  Dokument/Ansicht-Modell verwenden, wird dies automatisch ausgeführt.
    
    void CserverDlg::OnPaint() 
    {
    	if (IsIconic())
    	{
    		CPaintDC dc(this); // Gerätekontext zum Zeichnen
    
    		SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
    
    		// Symbol in Clientrechteck zentrieren
    		int cxIcon = GetSystemMetrics(SM_CXICON);
    		int cyIcon = GetSystemMetrics(SM_CYICON);
    		CRect rect;
    		GetClientRect(&rect);
    		int x = (rect.Width() - cxIcon + 1) / 2;
    		int y = (rect.Height() - cyIcon + 1) / 2;
    
    		// Symbol zeichnen
    		dc.DrawIcon(x, y, m_hIcon);
    	}
    	else
    	{
    		CDialog::OnPaint();
    	}
    }
    
    // Die System ruft diese Funktion auf, um den Cursor abzufragen, der angezeigt wird, während der Benutzer
    //  das minimierte Fenster mit der Maus zieht.
    HCURSOR CserverDlg::OnQueryDragIcon()
    {
    	return static_cast<HCURSOR>(m_hIcon);
    }
    
    // Automatisierungsserver sollten nicht beendet werden, wenn der Benutzer
    //  das UI schließt und ein Controller eines seiner Objekte nicht freigibt.
    //  Diese Nachrichtenhandler stellen sicher, dass das UI ausgeblendet wird,
    //  das Dialogfeld beim Schließen aber erhalten bleibt, wenn der Proxy
    //  noch verwendet wird.
    
    void CserverDlg::OnClose() 
    {
    	if (CanExit())
    		CDialog::OnClose();
    }
    
    void CserverDlg::OnOK() 
    {
    	if (CanExit())
    		CDialog::OnOK();
    }
    
    void CserverDlg::OnCancel() 
    {
    	if (CanExit())
    		CDialog::OnCancel();
    }
    
    BOOL CserverDlg::CanExit()
    {
    	// Wenn das Proxy-Objekt noch vorhanden ist, gibt der Automatisierungscontroller
    	//  diese Anwendung nicht frei. Blenden Sie nur
    	//  die Benutzeroberfläche des Dialogfelds aus.
    	if (m_pAutoProxy != NULL)
    	{
    		ShowWindow(SW_HIDE);
    		return FALSE;
    	}
    
    	return TRUE;
    }
    
    HBRUSH CserverDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
    {
        switch (nCtlColor)
        {
        case CTLCOLOR_STATIC:  // Für alle Statics          
                pDC->SetTextColor(RGB(255,250,247));
                pDC->SetBkColor(RGB(255,250,247));
    
        case CTLCOLOR_DLG:     // Für den Dialog            
                return (HBRUSH)m_brush;
    
        default:
                return CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
        }
    }
    
    // serverDlg.h : Headerdatei
    //
    
    #pragma once
    
    class CserverDlgAutoProxy;
    
    // CserverDlg Dialogfeld
    class CserverDlg : public CDialog
    {
    	DECLARE_DYNAMIC(CserverDlg);
    	friend class CserverDlgAutoProxy;
    
    // Konstruktion
    public:
    	HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor);
    	CserverDlg(CWnd* pParent = NULL);	// Standardkonstruktor
    	virtual ~CserverDlg();
    
    // Dialogfelddaten
    	enum { IDD = IDD_SERVER_DIALOG };
    
    	protected:
    	virtual void DoDataExchange(CDataExchange* pDX);	// DDX/DDV-Unterstützung
    
    // Implementierung
    protected:
    	CserverDlgAutoProxy* m_pAutoProxy;
    	HICON m_hIcon;
    
    	BOOL CanExit();
    
    	// Generierte Funktionen für die Meldungstabellen
    	virtual BOOL OnInitDialog();
    	afx_msg void OnPaint();
    	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();
    };
    


  • @C++ Core
    da du nicht genauer spezifizierst was genau du an deiner Dialoganwendung färben willst... verweise ich dich mal auf diesen Thread hier... vielleicht hilft er dir weiter.

    http://www.c-plusplus.net/forum/viewtopic.php?t=39067

    ciao veganza



  • Alles bis auf Static_Texts schwarz, die Statics weiß



  • dann paßt der Link den ich gepostet habe perfekt 😉

    ciao veganza



  • Ja, nach dem Link hab ich es auch gemacht.
    Ich befürchte nur, dass ich irgendetwas vergessen habe



  • Wer kann mir sagen was ich noch machen muss um den Dialog und den Text zu färben 😕



  • @C++ Core

    meinst Du sowas hier ???
    http://ezshare.de/files-de/168378/test_core.JPG.html

    ciao veganza



  • @veganza
    Genau so meine ich das!



  • @veganza
    Es sollte aber auch Buttons und Edit-Boxen in ihrer Farbe geändert werden!



  • @C++ Core

    dann fge doch endlich wie in meinem Link beschrieben...

    SetDialogBkColor(RGB(0, 0, 0), RGB(255, 255, 255));
    

    in Deiner InitInstance() ein... und fertig ist das ganze !!!

    ciao veganza



  • Wo genau?



  • Oh, noch ein Problem, hatte ich ja schon ganz vergessen 🙄

    c:\Dokumente und Einstellungen\D.Derigs\Eigene Dateien\Visual Studio Projects\server\serverDlg.cpp(80) : error C3861: 'SetDialogBkColor': identifier not found, even with argument-dependent lookup
    




  • @SpyServer
    Das bringt mich nicht wirklich weiter

    *HEUL* ICH WILL DOCH NUR EINE LÖSUNG *HEUL*



  • @C++ Core
    lege Dir mal bitte einen anderen "Namen" zu...

    C++ Core schrieb:

    Das bringt mich nicht wirklich weiter
    *HEUL* ICH WILL DOCH NUR EINE LÖSUNG *HEUL*

    da fange ich gleich das Weinen an... schreibt mir Step by Step was ich tun soll... oder wie ???

    ...serverDlg.cpp(80) : error...

    du bist im falschen File... denn in der DialogKlasse wirst du die InitInstance() nicht finden !!! versuche es mal in deiner App-Klasse !!!

    Wo genau?

    oberhalb des DoModal() Aufrufs...

    ciao veganza





  • Ich möchte ja nicht unhöflich sein, aber es geht immer noch nicht!
    (Jetzt weiss ich aber, es liegt an mir)
    server.cpp

    BOOL CserverApp::InitInstance()
    {
    
    	// InitCommonControls() ist für Windows XP erforderlich, wenn ein Anwendungsmanifest
    	// die Verwendung von ComCtl32.dll Version 6 oder höher zum Aktivieren
    	// von visuellen Stilen angibt. Ansonsten treten beim Erstellen von Fenstern Fehler auf.
    	InitCommonControls();
    
    	CWinApp::InitInstance();
    
    	if (!AfxSocketInit())
    	{
    		AfxMessageBox(IDP_SOCKETS_INIT_FAILED);
    		return FALSE;
    	}
    
    	// OLE-Bibliotheken initialisieren
    	if (!AfxOleInit())
    	{
    		AfxMessageBox(IDP_OLE_INIT_FAILED);
    		return FALSE;
    	}
    
    	AfxEnableControlContainer();
    
    	// Standardinitialisierung
    	// Wenn Sie diese Features nicht verwenden und die Größe
    	// der ausführbaren Datei verringern möchten, entfernen Sie
    	// die nicht erforderlichen Initialisierungsroutinen.
    	// Ändern Sie den Registrierungsschlüssel unter dem Ihre Einstellungen gespeichert sind.
    	// TODO: Ändern Sie diese Zeichenfolge entsprechend,
    	// z.B. zum Namen Ihrer Firma oder Organisation.
    	SetRegistryKey(_T("Vom lokalen Anwendungs-Assistenten generierte Anwendungen"));
    	// Befehlszeile für die Automatisierung oder Registrierung bzw. das Aufheben der Registrierung von Optionen verarbeiten.
    	CCommandLineInfo cmdInfo;
    	ParseCommandLine(cmdInfo);
    	// Anwendung wurde mit /Embedding oder /Automation gestartet.
    	// Führen Sie die Anwendung als Automatisierungsserver aus.
    	if (cmdInfo.m_bRunEmbedded || cmdInfo.m_bRunAutomated)
    	{
    		// Klassenfactorys über CoRegisterClassObject() registrieren.
    		COleTemplateServer::RegisterAll();
    	}
    	// Anwendung wurde mit /Unregserver oder /Unregister gestartet. Entfernen
    	// Sie die Einträge aus der Registrierung.
    	else if (cmdInfo.m_nShellCommand == CCommandLineInfo::AppUnregister)
    	{
    		COleObjectFactory::UpdateRegistryAll(FALSE);
    		AfxOleUnregisterTypeLib(_tlid, _wVerMajor, _wVerMinor);
    		return FALSE;
    	}
    	// Anwendung wurde als Standalone oder mit anderen Optionen gestartet (z.B. /Register
    	// oder /Regserver). Aktualisieren Sie die Registrierungseinträge, einschl. der Typenbibliothek.
    	else
    	{
    		COleObjectFactory::UpdateRegistryAll();
    		AfxOleRegisterTypeLib(AfxGetInstanceHandle(), _tlid);
    		if (cmdInfo.m_nShellCommand == CCommandLineInfo::AppRegister)
    			return FALSE;
    	}
    	SetDialogBkColor(RGB(255, 0, 0), RGB(0, 255, 255));                // Die Farbwerte
    	CserverDlg dlg;
    	m_pMainWnd = &dlg;
    	INT_PTR nResponse = dlg.DoModal();
    	if (nResponse == IDOK)
    	{
    		// TODO: Fügen Sie hier Code ein, um das Schließen des
    		//  Dialogfelds über OK zu steuern
    	}
    	else if (nResponse == IDCANCEL)
    	{
    		// TODO: Fügen Sie hier Code ein, um das Schließen des
    		//  Dialogfelds über "Abbrechen" zu steuern
    	}
    
    	// Da das Dialogfeld geschlossen wurde, FALSE zurückliefern, so dass wir die
    	//  Anwendung verlassen, anstatt das Nachrichtensystem der Anwendung zu starten.
    	return FALSE;
    }
    


  • Das geht ganz einfach nicht 😉



  • SetDialogBkColor(RGB(255, 0, 0), RGB(0, 255, 255));

    solltest du weiter oben in die initinstance schreiben. Dort unten ist sie ja schon lange rausgesprungen mit irgendnem return wert.

    (Vermute ich zumindest)

    mfg, TFTS



  • Nein muss er nicht. Wichtig ist das es vor DoMOdal kommt. Sollte schon vorher rausgesprungen werden dann bringt ihm eine andere Farbe auch nichts da das Programm nicht startet.


Anmelden zum Antworten