Edit Control with Icon and Background Text

 

 

Introduction

This article presents an edit control that can display an icon and a prompt text on the background (when the edit control has no text). This is most suitable to indicate to the users that an edit control is used to input text that is used for a search.

Demystifying Subclassing.")

The image below shows several such edit controls.

The same controls look like the following when text is entered.

Features of the edit control:

  • Displays an icon on the right side of the control
  • Displays a prompt text (only when the control has no text)
  • Changes the color of the prompt text
  • Changes the font of the prompt text

Implementation

The class implementing this control is called CSymbolEdit and subclasses CEdit. (If you're not familiar with subclassing, a method of customizing the behavior of a window, I suggest you read this article: "

The public interface of the control is:

  
  
void  SetSymbolIcon(HICON hIcon, BOOL redraw  =  TRUE);
void  SetSymbolIcon(UINT id,     BOOL redraw  =  TRUE);

void  SetPromptText(CString text,   BOOL redraw  =  TRUE);
void  SetPromptText(LPCTSTR szText, BOOL redraw  =  TRUE);

void  SetPromptTextColor(COLORREF color, BOOL redraw  =  TRUE);

void  SetPromptFont(CFont &  font,              BOOL redraw  =  TRUE);
void  SetPromptFont( const  LOGFONT *  lpLogFont, BOOL redraw  =  TRUE);

There are two overloads for SetSymbolIcon, one that takes an HICON, and one that takes the ID of a resource. The control is responsible for releasing the icon resource only when the second overload was used. If an HICON was passed, the client of the control must release this resource.

If SetPromptTextColor is not called and a prompt text was set, this prompt text is draw by default with the color RGB(127, 127, 127).

If SetPromptFont is not called and a prompt text was set, this text is drawn with Calibri in italics.

How to Use It in Your Code

  1. In your dialog class header, include "SymbolEdit.h".

  2. Declare a variable of type CSymbolEdit.

        
        
    CSymbolEdit m_edit;
  3. Map it to the control in DoDataExchange:

        
        
    void  CEditDemoDlg::DoDataExchange(CDataExchange *  pDX)
    {
        CDialog::DoDataExchange(pDX);
        DDX_Control(pDX, IDC_EDIT, m_edit);
    }
  4. Set the icon, text, color, or font (in OnInitDialog, for example).

        
        
    m_edit.SetSymbolIcon(IDI_SEARCH, FALSE);
    m_edit.SetPromptText(_T(
    " Find  " ), FALSE);
    m_edit.SetPromptTextColor(RGB(
    192 192 192 ));

About the Author
Marius Bancila is a Microsoft MVP for VC++. He works as a software developer for a Norwegian-based company. He is mainly focused on building desktop applications with MFC and VC#. He keeps a blog at www.mariusbancila.ro/blog, focused on Windows programming. In July 2007 together with two other Romanian MVPs he created codexpert.ro, a community for Romanian C++/VC++ programmers.

Downloads

  • EditDemo_2005.zip - demo application in Visual Studio 2005
  • EditDemo_2008.zip - demo application in Visual Studio 2008
  • SymbolEdit.zip - source code for the edit control

    href="http://www.internet.com/icom_includes/earthweb/img/epfs.css" type="text/css" rel="stylesheet" />

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值