006
13.09.2005, 09:54 Uhr
FloSoft
Medialer Over-Flow (Administrator)
|
also
Beispiel:
| C++: |
HBRUSH CMyDialog::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) { HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
switch(nCtlColor) { case CTLCOLOR_STATIC: case CTLCOLOR_DLG: {
pDC->SetBkMode(TRANSPARENT); pDC->SetTextColor(RGB(255,255,255)); return (HBRUSH)m_Brush; // m_Brush ist eine Membervariable (muss global/member gültig sein), im Konstruktor mit z.b m_Brush.CreateSolidBrush(RGB(60,79,109)); initialisiert } break; }
return hbr; }
|
das macht den kompletten Dialog mit higru auf 60,79,109, textfarbe weiß. Editfeld wird dann z.b ebenfalls im higru in dem grünton eingefärbt. Wenn du nur das Editfeld färben willst musst du das z.b so machen:
| C++: |
// myedit.h
class CMyEdit : public CEdit { DECLARE_DYNAMIC(CMyEdit)
public: CMyEdit(); virtual ~CMyEdit(); protected: afx_msg HBRUSH CtlColor(CDC* /*pDC*/, UINT /*nCtlColor*/); DECLARE_MESSAGE_MAP() private: COLORREF m_clrText; COLORREF m_clrBkgnd; CBrush m_brBkgnd; };
// myedit.cpp #include "stdafx.h" #include "MyEdit.h"
IMPLEMENT_DYNAMIC(CMyEdit, CEdit)
BEGIN_MESSAGE_MAP(CMyEdit, CEdit) ON_WM_CTLCOLOR_REFLECT() END_MESSAGE_MAP()
CMyEdit::CMyEdit() { m_clrText = RGB( 0, 0, 0 ); m_clrBkgnd = RGB( 255, 255, 0 ); m_brBkgnd.CreateSolidBrush( m_clrBkgnd ); }
CMyEdit::~CMyEdit() { }
HBRUSH CMyEdit::CtlColor(CDC* pDC, UINT nCtlColor) { pDC->SetTextColor( m_clrText ); // text pDC->SetBkColor( m_clrBkgnd ); // text bkgnd return m_brBkgnd; // ctl bkgnd }
|
oder:
| C++: |
HBRUSH CMyDialog::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) { HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
switch(pWnd->GetDlgCtrlID()) { case IDC_EDIT1: { pDC->SetBkMode(TRANSPARENT); pDC->SetTextColor(RGB(255,255,255)); return (HBRUSH)m_Brush; // m_Brush ist eine Membervariable (muss global/member gültig sein), im Konstruktor mit z.b m_Brush.CreateSolidBrush(RGB(60,79,109)); initialisiert } break; }
return hbr; }
|
Die reflectionmethode ist sauberer wenn du alle Editfelder einfärben willst, da das dann nicht vom Dialog abhängt sondern rein davon ob du dem Editfeld die entsprechende Klasse zuweist. Dann natürlich eine Member-Control-variable für das entsprechende Editfeld mit CMyEdit als Typenklasse anlegen -- class God : public ChuckNorris { }; Dieser Post wurde am 13.09.2005 um 09:56 Uhr von FloSoft editiert. |