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.



  • Er hat es doch über DoModal() und es geht ja offensichtlich
    noch immer nicht.


Anmelden zum Antworten