06
Mar
2008

Acest articol prezinta un control care poate afisa o icoana si un text in fundal (atunci cand nu exista text in control). Un astfel de control se preteaza a fi folosit pentru a indica utilizatorilor ca textul dintr-un control este folosit pentru o cautare.

Imaginea de mai jos afiseaza cateva exemple create cu acest control.

Aceleasi controale arata ca mai jos, atunci cand contin text.

Facilitati ale controlului prezentat:

  • Afiseaza o icoana in partea dreapta
  • Afiseaza un text indicator in fundal, atunci cand controlul nu are text
  • Modifica culoarea textului indicator
  • Modifica fontul textului indicator

Implementare

Clasa care implementeaza acest control se numeste CSymbolEdit si subclaseaza CEdit. (Pentru cei nefamiliari cu subclasarea recomand citirea acestui articol, Demystifying Suclassing.)

Interfata publica a controlului este:

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);

Exista doua metode supraincarcate SetSymbolIcon, una care ia un argument de tip HICON, si una care ia identificatorul unei resurse icoana. Controlul este responsabil pentru eliberarea resursei icoana doar cand cea dea doua metoda este folosita. Pentru prima, clientul controlului trebuie sa sa faca acest lucru.

Daca SetPromptTextColor nu este apelata si un text indicator a fost selectat, acest text indicator este desenal in fundal folosind culoarea RGB(127, 127, 127).

Daca SetPromptFont nu este apelata si un text indicator a fost selectat, acest text este desenat in fundal folosind Calibri cu italice.

Cum sa folositi controlul

  1. In header-ul clasei dialog includeti "SymbolEdit.h"

  2. Adaugati o variabila de tip CSymbolEdit in clasa dialog.

    CSymbolEdit m_edit;
    
  3. Mapati variabila pe control in functia DoDataExchange:

    void CEditDemoDlg::DoDataExchange(CDataExchange* pDX)
    {
    	CDialog::DoDataExchange(pDX);
    	DDX_Control(pDX, IDC_EDIT, m_edit);
    }
    
  4. Setati icoana, textul, culoarea sau fontul (in OnInitDialog de examplu).

    m_edit.SetSymbolIcon(IDI_SEARCH, FALSE);
    m_edit.SetPromptText(_T("Find "), FALSE);
    m_edit.SetPromptTextColor(RGB(192, 192, 192));
    
[phpBB Debug] PHP Warning: in file [ROOT]/phpbb/db/driver/mysqli.php on line 317: mysqli_free_result(): Couldn't fetch mysqli_result