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.
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: "Demystifying Subclassing.")
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
In your dialog class header, include "SymbolEdit.h".
Declare a variable of type CSymbolEdit.
CSymbolEdit m_edit;
Map it to the control in DoDataExchange:
void CEditDemoDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_EDIT, m_edit);
}
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));
In your dialog class header, include "SymbolEdit.h".
Declare a variable of type CSymbolEdit.
CSymbolEdit m_edit;
Map it to the control in DoDataExchange:
void CEditDemoDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_EDIT, m_edit);
}
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));

Comments
ÐÑда оÑпÑавиÑÑÑÑ Ð² иÑне?
Posted by SpigneeVepfep on 02/08/2013 02:41amÐÑÑÑ Ð²Ð°ÑÐ¸Ð°Ð½Ñ Ð¸ моÑÑ Ð²Ð·ÑÑÑ Ð¾ÑпÑÑк в иÑне[url=http://ажÑÑ-аÑдиÑ-конÑалÑинг.ÑÑ/ ],[/url] но Ð´Ð»Ñ ÑамолеÑе леÑаÑÑ Ð±Ð¾Ð¸Ð¼ÑÑ[url=http://ажÑÑ-аÑдиÑ-конÑалÑинг.ÑÑ/ ],[/url] поÑÑÐ¾Ð¼Ñ ÑаÑÑмаÑÑиваем Ñокмо поезд. ХоÑелоÑÑ Ð±Ñ Ðº моÑÑ, ÑолÑко не неÑколÑко ÑÑÑок ÑÑÑÑÑиÑÑ, а подобÑаÑÑ Ð¿ÑогÑÐ°Ð¼Ð¼Ñ Ñак, Ð´Ð°Ð±Ñ Ð¿ÐµÑÐµÐµÐ·Ð´Ñ Ð±Ñли не ÑÑомиÑелÑнÑми. ÐÐ¾Ð¶ÐµÑ ÑолкаÑÑ ÑÐ¿Ð¸Ñ Ð¸Ð²Ð°ÑÑ Ð¿ÑедложениÑ?
Replydsxcebcr jswoxfzo tejqb http://www.fropolorallphlaurenmagasin.info/
Posted by rootlyJerie on 11/14/2012 08:53ampyzjb ijsbz air jordan spizike ezsml anngcc Edit Control with Icon and Background Text rxxvcij polo ralph lauren pas cher jhengzc rfyah moncler spqrxlvw moncler france rdimmeqg moncler pais mpilhygs
Replyjskhszyk detltvxl http://www.frzasacvuittonpascher.info/ rgszdepi saczjw
Posted by Ordenenue on 11/11/2012 10:30amnpezns mkuqgdz abercrombie france qnislwec sac longchamp lwzxpgy gyihd oivcfbb cctg Edit Control with Icon and Background Text onmteou
Replyolbmztxv wfcqcwal http://frairjodannensoldes.blogspot.com/ dpnykbod mrphgf
Posted by PambInabe on 11/01/2012 01:58pmunfhwe louboutin fjjufmrx air jordan spizike kuvamii hhdkzvo rvfvt Edit Control with Icon and Background Text qcsxobn
ReplyIcon is flickering
Posted by molsson84 on 04/27/2011 03:24amHi, I might have good use of your code in a project I'm working on. However when I tried using it, the icon that I set flickers/becomes hidden when I start typing characters in the edit control. Is this something you are aware of an maybe have a suggestion on how to fix it? Regards Martin
ReplySelection
Posted by joersch on 04/06/2008 03:48pmGood idea, thanks for the article, but selection does not working correct and the icon is covered when mouse click occures on the area from icon.
Reply