Design
-
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=setdialogbkcolorGruß
:: 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:
- 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);
- 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]
-
Naja, wie du geschrieben hast, kannst du jetzt folgenden Code einfügen
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; }
Damit kannst du zwar keinen ganzen Dialog fürben, aber immerhin Statics, Edits etc.
Gruß
:: NoName ::
-
Ja, das ist so richtig. Stimmt denn was nicht ?
Gruß
:: NoName ::
-
:: NoName :: schrieb:
Ja, das ist so richtig. Stimmt denn was nicht ?
Gruß
:: NoName ::Ja, es geht nicht!
Es ist keine Änderung feststellbar!PS: Such bitte nochmal bei dir, irgendwo muss die Funktion ja aufgerufen werden
-
Das ist der Ärger mit 6.0 und 2003. Nichts geht mehr so wie
man es vorher gemacht hat. Und alte Projekte in 2003 kompilieren
bringt meist auch mehr Fehlermeldungen als man sich je hätte
vorstellen können.
-
@::NoName::
Wird Sie den nirgends aufgerufen (kann ich mir irgendwie nicht vorstellen!!) ?MfG,
D.Derigs