Click here to Skip to main content
5,787,682 members and growing! (16,940 online)
Email Password   helpLost your password?
Desktop Development » Edit Controls » Beginners     Beginner License: The Code Project Open License (CPOL)

Change the style of edit control

By guanghui wu

This article will tell you an easy way to change the style of edit control.
C++ (VC6, C++), Windows (Windows, Win2K, WinXP), MFC

Posted: 29 Mar 2008
Updated: 29 Mar 2008
Views: 12,259
Bookmarked: 28 times
Note: This is an unedited reader contribution
Announcements
Loading...



Search    
Advanced Search
Sitemap
3 votes for this Article.
Popularity: 1.75 Rating: 3.67 out of 5
1 vote, 33.3%
1
0 votes, 0.0%
2
0 votes, 0.0%
3
1 vote, 33.3%
4
1 vote, 33.3%
5
Note: This is an unedited contribution. If this article is inappropriate, needs attention or copies someone else's work without reference then please Report This Article

Introduction

This is an easy way to change the style of edit controls.You know, we can add message handler WM_CTLCOLOR in it's parent window( a dialog ).Then use switch sentence to determine change which edit control styles.when there many edit box, you find It's unadvisable.So I determined to write my own edit class-named CExEdit, which derived from CEdit.

Using the code

The following member functions provided by the new class-CExEdit.

  void setTextColor( COLORREF clrText );      // set the text color of edit control
  void setFontSize( int nSize );   // set size of font 
  void setFontStyle( BOOL bItalic, BOOL bBold, BOOL bUnderLine );
  void setBkColor( COLORREF clrBk );   //set the background color of edit control
  void setFont( CString strFontName, BYTE language );  // set font name, and character set
  void drawEditFrame();            //draw edit border  
  void setFontHelper();

It's implement is very easy.Like as the following code:

void CExEdit::setTextColor( COLORREF clrText )
{
     m_clrText = clrText;
}
void CExEdit::setFontSize( int nSize )
{
     m_nFontSize = nSize;
}
void CExEdit::setFontStyle( BOOL bItalic, BOOL bBold, BOOL bUnderLine )
{
     m_bItalic = bItalic;
     m_bBold = bBold;
     m_bUnderLine = bUnderLine;
}
void CExEdit::setBkColor( COLORREF clrBk )
{
     m_clrBk = clrBk;
     if( m_bkBrush.m_hObject )
         m_bkBrush.DeleteObject();
 
     m_bkBrush.CreateSolidBrush( m_clrBk );
     //m_bkBrush.CreateSolidBrush( RGB( 0, 255, 255 ) );
}
void CExEdit::setFont( CString strFontName, BYTE language )
{
     m_strFontName = strFontName;
     m_language = language;
}
void CExEdit::drawEditFrame()
{
     CRect rcItem;
     CDC* pDC=this->GetDC();
     this->GetClientRect(&rcItem);
     if( !this->IsWindowEnabled() )
     {
          rcItem.InflateRect( 1, 1 );
          pDC->Draw3dRect( rcItem, RGB( 96, 96, 96),RGB( 96, 96, 96));
          rcItem.InflateRect(1,1);
          pDC->Draw3dRect( rcItem, RGB( 128, 128, 128),RGB( 128, 128, 128 ) );
          ReleaseDC( pDC );
          return;
     }
     if( m_bOver&& m_bFocus )
     {
          rcItem.InflateRect(1,1);
          pDC->Draw3dRect(rcItem,RGB( 255, 102, 51 ),RGB( 255, 102, 51 ) );
          rcItem.InflateRect(1,1);
          pDC->Draw3dRect(rcItem,RGB( 255, 163, 132 ),RGB( 255, 163, 132 ) );
     }
     if( m_bOver && !m_bFocus )
     {
          rcItem.InflateRect( 1, 1 );
          pDC->Draw3dRect( rcItem,RGB( 0, 176, 88 ),RGB( 0, 176, 88 ) );
          rcItem.InflateRect(1,1);
              pDC->Draw3dRect( rcItem,RGB( 122, 189, 32 ),RGB( 122, 189, 32 ) );
     }
     if( !m_bOver )
     {
          rcItem.InflateRect( 1, 1 );
          pDC->Draw3dRect(rcItem,RGB(102,102,153),RGB(102,102,153));
          rcItem.InflateRect( 1, 1);
          pDC->Draw3dRect(rcItem,RGB(174,174,202),RGB(174,174,202));
     }
     ReleaseDC(pDC);
}
void CExEdit::setFontHelper()
{   
    if( m_pFont->m_hObject )
        m_pFont->DeleteObject();
    LOGFONT  lgFont;
    lgFont.lfCharSet = m_language;
    lgFont.lfClipPrecision = 0;
    lgFont.lfEscapement = 0;
    strcpy( lgFont.lfFaceName, m_strFontName );
    lgFont.lfHeight = m_nFontSize;
    lgFont.lfItalic = m_bItalic;
    lgFont.lfOrientation = 0;
    lgFont.lfOutPrecision = 0;
    lgFont.lfPitchAndFamily = 2;
    lgFont.lfQuality = 0;
    lgFont.lfStrikeOut = 0;
    lgFont.lfUnderline = m_bUnderLine;
    lgFont.lfWidth = 0;
    if( m_bBold )
       lgFont.lfWeight = FW_BOLD;
    else
       lgFont.lfWeight = FW_NORMAL;
    m_pFont->CreatePointFontIndirect( &lgFont );
    SetFont( m_pFont );
}

Add message handler

Add the following message handler in CExEdit class

       afx_msg void OnKillfocus();
       afx_msg void OnSetfocus();
       afx_msg void OnMouseMove(UINT nFlags, CPoint point);
       afx_msg LRESULT OnMouseHover( WPARAM wParam, LPARAM lParam );
       afx_msg LRESULT OnMouseLeave( WPARAM wParam, LPARAM lParam );       
       afx_msg HBRUSH CtlColor(CDC* pDC, UINT nCtlColor);

First we must add the following code to track mouse event to dynamic change style of the edit control .

void CExEdit::OnMouseMove(UINT nFlags, CPoint point) 
{
     // TODO: Add your message handler code here and/or call default
     TRACKMOUSEEVENT mouseEvent;
 
     mouseEvent.cbSize = sizeof( TRACKMOUSEEVENT );
     mouseEvent.dwFlags = TME_HOVER | TME_LEAVE;
     mouseEvent.dwHoverTime = 0;
     mouseEvent.hwndTrack = m_hWnd;
     _TrackMouseEvent( &mouseEvent );
     CEdit::OnMouseMove(nFlags, point);
}

The following code is very important, in which we can change the backgroud color, textcolor and others.

HBRUSH CExEdit::CtlColor(CDC* pDC, UINT nCtlColor) 
{
     // TODO: Change any attributes of the DC here
     drawEditFrame();
     
     pDC->SetTextColor( m_clrText );
     pDC->SetBkColor( m_clrBk );
     //pDC->SetBkMode( TRANSPARENT );
     // TODO: Return a non-NULL brush if the parent's handler should not be called
     return m_bkBrush;
}

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

About the Author

guanghui wu



Occupation: Web Developer
Location: China China

Other popular Edit Controls articles:

Article Top
Sign Up to vote for this article
You must Sign In to use this message board.
FAQ FAQ Noise ToleranceSearch Search Messages 
 Layout  Per page   
 Msgs 1 to 8 of 8 (Total in Forum: 8) (Refresh)FirstPrevNext
GeneralError with multiline editmemberErnst Sauer5:54 4 Apr '08  
GeneralRe: Error with multiline editmemberguanghui wu20:09 4 Apr '08  
GeneralRe: Error with multiline editmemberErnst Sauer10:11 5 Apr '08  
Generalrelease version crash of your sample codememberchris_liush23:35 31 Mar '08  
GeneralRe: release version crash of your sample code [modified]memberguanghui wu8:20 1 Apr '08  
GeneralBRUSH!memberbcde0319113021:29 31 Mar '08  
GeneralSwitch Wrap on or off?memberpeterboulton8:21 29 Mar '08  
Generalgood workmemberbughoho7:46 29 Mar '08  

General General    News News    Question Question    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

PermaLink | Privacy | Terms of Use
Last Updated: 29 Mar 2008
Editor: Sean Ewington
Copyright 2008 by guanghui wu
Everything else Copyright © CodeProject, 1999-2009
Web20 | Advertise on the Code Project