VisualC++ J'va y penser ... | 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 :
- le header
- class CMyCombo : public CComboBox
- {
- public:
- CMyCombo();
- virtual ~CMyCombo();
- private:
- CString m_csTempText;
- public:
- //{{AFX_VIRTUAL(CMyCombo)
- //}}AFX_VIRTUAL
- virtual int OnToolHitTest( CPoint point, TOOLINFO* pTI ) const;
- BOOL OnToolTipText( UINT id, NMHDR * pNMHDR, LRESULT * pResult );
- protected:
- //{{AFX_MSG(CMyCombo)
- //}}AFX_MSG
- DECLARE_MESSAGE_MAP()
- };
- Et le cpp
- CMyCombo::CMyCombo()
- {
- m_csTempText = _T("" );
- EnableToolTips();
- }
- CMyCombo::~CMyCombo()
- {
- }
- BEGIN_MESSAGE_MAP(CMyCombo, CComboBox)
- //{{AFX_MSG_MAP(CMyCombo)
- //}}AFX_MSG_MAP
- ON_NOTIFY_EX_RANGE(TTN_NEEDTEXTW, 0, 0xFFFF, OnToolTipText)
- ON_NOTIFY_EX_RANGE(TTN_NEEDTEXTA, 0, 0xFFFF, OnToolTipText)
- END_MESSAGE_MAP()
- int CMyCombo::OnToolHitTest( CPoint point, TOOLINFO* pTI ) const
- {
- pTI->hwnd = m_hWnd;
- pTI->uId = ( UINT )1; // 1 le tooltip est trouve
- pTI->lpszText = LPSTR_TEXTCALLBACK; // il notify l'affichage via TTN_NEEDTEXTW/A
- CRect rc;
- GetWindowRect( &rc );
- ScreenToClient( &rc );
- pTI->rect = rc;
- return pTI->uId;
- }
- BOOL CMyCombo::OnToolTipText( UINT id, NMHDR * pNMHDR, LRESULT * pResult )
- {
- // ANSI et UNICODE du message
- TOOLTIPTEXTA* pTTTA = (TOOLTIPTEXTA*)pNMHDR;
- TOOLTIPTEXTW* pTTTW = (TOOLTIPTEXTW*)pNMHDR;
- UINT nID = pNMHDR->idFrom;
- if( nID == 0 ) // Notification par defaut on la traite pas
- return FALSE;
- int iSel = GetCurSel();
- if (iSel == CB_ERR) {
- m_csTempText = _T("" );
- }
- else {
- GetLBText(iSel, (CString&)m_csTempText);
- }
- #ifndef _UNICODE
- if (pNMHDR->code == TTN_NEEDTEXTA)
- lstrcpyn(pTTTA->szText, m_csTempText, 80);
- else
- _mbstowcsz(pTTTW->szText, m_csTempText, 80);
- #else
- if (pNMHDR->code == TTN_NEEDTEXTA)
- _wcstombsz(pTTTA->szText, m_csTempText, 80);
- else
- lstrcpyn(pTTTW->szText, m_csTempText, 80);
- #endif
- *pResult = 0;
- return TRUE;
- }
|
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
|