Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » Textbox einfärben

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
11.09.2005, 19:18 Uhr
~master
Gast


hallo,
weiss jemand, wie man bei MFC die Textboxen einfärben kann?

master
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
11.09.2005, 19:36 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


CEdit überschreiben und dort die CTL-Color-Reflection verändern
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
11.09.2005, 20:08 Uhr
~master
Gast


und wie geht das genau?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
12.09.2005, 10:56 Uhr
Oli_1977



Schau Dir mal die Nachricht WM_CTLCOLOR an.
In der Hilfe sind gute Beispiele dafür vorhanden.

So färbe ich, wenn nötig meine Steuerelemente ein.

Oli
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
12.09.2005, 19:48 Uhr
~master
Gast


hmm
pDC->SetBkColor(m_clrBkgnd);

das ändert nur den text hintergrund, füllt aber nicht das ganze control aus
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
13.09.2005, 08:09 Uhr
Oli_1977



Du mußt im konstruktor Deiner Klasse eine Variable vom Typ HBRUSH erstellen ( nicht vergessen im Dekonstruktor zu löschen).

In der Funktion OnCtlColor:

C++:
if (pWnd == &m_static_dein_textfeld)
{
   return dein_hbrush;
}



So müßte es funktionieren. Dein Textfeld müßte die Hintergrundfarbe Deines HBRUSH's bekommen.

Oli
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
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.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
13.09.2005, 18:24 Uhr
~master
Gast


hmm thx..
noch ne frage..
was muss m_Brush für einen Variabeltyp sein?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
13.09.2005, 18:31 Uhr
~master
Gast


das problem ist, das färbt nur den text hintergrund
und nicht das ganze control
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
13.09.2005, 20:13 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


1. CBrush
2. dann selbst zeichnen: ownerdraw (z.b durch ModifyWindow(0, ES_OWNERDRAW); in dem Ctl-reflect, dann per DrawItem alles manuell zeichnen, bsp gibts in der msdn
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ VC++ / MFC ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: