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.htmlciao 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.cppBOOL 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.