1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108
| class CMaCombo : public CComboBox
{
#pragma region Attributs
protected :
/// <summary>Index de la sélection dans la liste.</summary>
int m_posSel;
/// <summary>Indique si la combobox est en lecture seule ou non.</summary>
bool m_lectureSeule;
/// <summary>Indique si la combobox a l'aspect grisé de la lecture seule ou non.</summary>
bool m_grise;
#pragma endregion
#pragma region Constructeurs & destructeur
public :
/// <summary>Construit une instance de combobox.</summary>
CMaCombo()
{
m_posSel = -1;
m_lectureSeule = m_grise = false;
};
/// <summary>Libère la mémoire occupée par l'objet.</summary>
virtual ~CMaCombo() {};
#pragma endregion
#pragma region Accesseurs
public :
/// <summary>Indique si la combobox est en lecture seule ou non.</summary>
/// <returns><c>TRUE</c> si la combobox est en lecture seule, <c>FALSE</c> sinon.</returns>
BOOL GetReadOnly() { return m_lectureSeule; };
/// <summary>Change le mode d'accès à la combobox : lecture seule ou mode normal.</summary>
/// <param name='valeur'><c>TRUE</c> pour passer en lecture seule, <c>FALSE</c> pour passer en mode normal.</param>
/// <returns><c>TRUE</c> si la modification s'est correctement effectuée, <c>FALSE</c> si une erreur
/// est intervenue.</returns>
BOOL SetReadOnly(BOOL valeur = TRUE);
#pragma endregion
#pragma region Méthodes
public :
/// <summary>Ajoute un élément à la fin de la liste déroulable.</summary>
/// <param name='texte'>Libellé de l'élément à ajouter.</param>
/// <returns>Position dans la liste de l'élément ajouté, ou <c>CB_ERR</c> en cas d'échec de l'ajout,
/// ou <c>CB_ERRSPACE</c> si l'espace est insuffisant dans la liste pour ajouter l'élément.</returns>
int AddString(LPCTSTR texte);
/// <summary>Ajoute un élément à la liste déroulable à une position donnée.</summary>
/// <param name='index'>Index (en base 0) de l'élément à insérer, ou <c>-1</c> pour l'ajouter en fin de liste.</param>
/// <param name='texte'>Libellé de l'élément à ajouter.</param>
/// <returns>Position dans la liste de l'élément inséré, ou <c>CB_ERR</c> en cas d'échec de l'insertion,
/// ou <c>CB_ERRSPACE</c> si l'espace est insuffisant dans la liste pour ajouter l'élément.</returns>
int InsertString(int index, LPCTSTR texte);
/// <summary>Change la sélection de la combobox en fonction de l'index passé en paramètre.</summary>
/// <param name='index'>Index (en base 0) de l'élément à sélectionner, ou <c>-1</c> pour ne rien
/// sélectionner.</param>
/// <returns>Index (en base 0) de la nouvelle sélection, ou <c>CB_ERR</c> si la sélection a échoué
/// ou si aucun élément n'a été sélectionné.</returns>
int SetCurSel(int index)
{
m_posSel = CComboBox::SetCurSel(index);
return m_posSel;
};
/// <summary>Recherche dans la liste un libellé commençant par la chaîne de caractères passée en paramètre.
/// Si un libellé est ainsi trouvé, l'élément correspondant dans la liste est sélectionné.</summary>
/// <param name='posDepart'>Index de départ de la recherche (en base 0). <c>-1</c> pour une recherche
/// dans toute la liste.</param>
/// <param name='texte'>Chaîne de caractères devant correspondre au moins au début du libellé recherché.</param>
/// <returns>Index de l'élément sélectionné si le libellé a été trouvé, ou <c>CB_ERR</c> en cas d'échec
/// de la recherche.</returns>
int SelectString(int posDepart, LPCTSTR texte);
/// <summary>Supprime un élément de la liste en fonction de sa position.</summary>
/// <param name='index'>Index (en base 0) de l'élément à supprimer.</param>
/// <returns>Nombre d'éléments restant dans la liste (si <c>>= 0</c>), ou <c>CB_ERR</c> si l'élément
/// recherché n'a pas été trouvé.</returns>
int DeleteString(UINT index);
/// <summary>Vide la liste déroulable de tous ses éléments.</summary>
void ResetContent()
{
CComboBox::ResetContent();
SetLectureSeule();
};
protected :
DECLARE_MESSAGE_MAP()
/// <summary>Change le mode d'accès à la combobox : lecture seule ou mode normal.</summary>
/// <param name='valeur'><c>true</c> pour passer en lecture seule, <c>false</c> pour passer en mode normal.</param>
/// <returns><c>true</c> si la modification s'est correctement effectuée, <c>false</c> si une erreur
/// est intervenue.</returns>
/// <remarks>Cette méthode est utilisée entre autres par <c>SetReadOnly</c>, qui, en plus, garde en mémoire
/// l'état de la combobox, ce qui n'est pas le cas de cette méthode.</remarks>
bool SetLectureSeule(bool valeur = true);
virtual void PreSubclassWindow()
{
CComboBox::PreSubclassWindow();
SetLectureSeule();
};
afx_msg HBRUSH CtlColor(CDC *pDC, UINT /*nCtlColor*/);
virtual BOOL OnCmdMsg(UINT nID, int nCode, void* pExtra, AFX_CMDHANDLERINFO* pHandlerInfo);
#pragma endregion |