[Visual C++] Clist : afficher le nom complet d'un élément

Clist : afficher le nom complet d'un élément [Visual C++] - C++ - Programmation

Marsh Posté le 07-12-2002 à 13:52:08    

J'ai une liste d'élément (ComboBox),
mais certains éléments sont plus longs que la taille horizontale de la ComboBox.
 
Dans certaines applications, lorsque on ne voit pas la totalité du texte, celui-ci apparaît lorsqu'on laisse la souris quelques temps sur le texte.
Je n'arrive pas à trouver d'exemple, mais j'éspère avoir été suffisament précis.
 
Donc ma question : comment faire celà avec Visual C++ ?
 
Merci.


---------------
Il n'est pas nécéssaire de réussir pour persévérer.
Reply

Marsh Posté le 07-12-2002 à 13:52:08   

Reply

Marsh Posté le 07-12-2002 à 18:33:00    

Fait une classe CCombo derive de la MFC
apres ca donne ca niveau code (on peu faire plus compliquer, la le ttoltip affiche la string selectionne a hauteur de 80 char max)
 

Code :
  1. le header
  2. class CMyCombo : public CComboBox
  3. {
  4. public:
  5.   CMyCombo();
  6. virtual  ~CMyCombo();
  7. private:
  8. CString  m_csTempText;
  9. public:
  10. //{{AFX_VIRTUAL(CMyCombo)
  11. //}}AFX_VIRTUAL
  12. virtual int OnToolHitTest( CPoint point, TOOLINFO* pTI ) const;
  13. BOOL OnToolTipText( UINT id, NMHDR * pNMHDR, LRESULT * pResult );
  14. protected:
  15. //{{AFX_MSG(CMyCombo)
  16. //}}AFX_MSG
  17. DECLARE_MESSAGE_MAP()
  18. };
  19. Et le cpp
  20. CMyCombo::CMyCombo()
  21. {
  22. m_csTempText = _T("" );
  23. EnableToolTips();
  24. }
  25. CMyCombo::~CMyCombo()
  26. {
  27. }
  28. BEGIN_MESSAGE_MAP(CMyCombo, CComboBox)
  29. //{{AFX_MSG_MAP(CMyCombo)
  30. //}}AFX_MSG_MAP
  31. ON_NOTIFY_EX_RANGE(TTN_NEEDTEXTW, 0, 0xFFFF, OnToolTipText)
  32. ON_NOTIFY_EX_RANGE(TTN_NEEDTEXTA, 0, 0xFFFF, OnToolTipText)
  33. END_MESSAGE_MAP()
  34. int CMyCombo::OnToolHitTest( CPoint point, TOOLINFO* pTI ) const
  35. {
  36. pTI->hwnd = m_hWnd;
  37. pTI->uId = ( UINT )1; // 1 le tooltip est trouve
  38. pTI->lpszText = LPSTR_TEXTCALLBACK; // il notify l'affichage via TTN_NEEDTEXTW/A
  39. CRect rc;
  40. GetWindowRect( &rc );
  41. ScreenToClient( &rc );
  42. pTI->rect = rc;
  43. return pTI->uId;
  44. }
  45. BOOL CMyCombo::OnToolTipText( UINT id, NMHDR * pNMHDR, LRESULT * pResult )
  46. {
  47. // ANSI et UNICODE du message
  48. TOOLTIPTEXTA* pTTTA = (TOOLTIPTEXTA*)pNMHDR;
  49. TOOLTIPTEXTW* pTTTW = (TOOLTIPTEXTW*)pNMHDR;
  50. UINT nID = pNMHDR->idFrom;
  51. if( nID == 0 )     // Notification par defaut on la traite pas
  52.  return FALSE;
  53. int iSel = GetCurSel();
  54. if (iSel == CB_ERR) {
  55.  m_csTempText = _T("" );
  56. }
  57. else {
  58.  GetLBText(iSel, (CString&)m_csTempText);
  59. }
  60. #ifndef _UNICODE
  61. if (pNMHDR->code == TTN_NEEDTEXTA)
  62.  lstrcpyn(pTTTA->szText, m_csTempText, 80);
  63. else
  64.  _mbstowcsz(pTTTW->szText, m_csTempText, 80);
  65. #else
  66. if (pNMHDR->code == TTN_NEEDTEXTA)
  67.  _wcstombsz(pTTTA->szText, m_csTempText, 80);
  68. else
  69.  lstrcpyn(pTTTW->szText, m_csTempText, 80);
  70. #endif
  71. *pResult = 0;
  72. return TRUE;
  73. }


 
Et et tu utilises CMyCombo a la place des CComboBox
 
Tu peux virer le code ANSI/UNICODE au cas ou


---------------
VT ... Vaucluse / Vrille(euse :sarcastic: ) c'est pareil tant qu'il y a l'humour :D
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed