2016-05-02 6 views
0

Je travaille dans une application Windows MFC. J'utilise des cases à cocher dans le contrôle Check List Box. Certaines des cases à cocher sont désactivées. Comment puis-je implémenter les astuces pour les cases à cocher désactivées?Astuce pour les cases à cocher désactivées dans le contrôle Liste de contrôle dans le MFC

+2

Afficher les parties pertinentes de votre code. –

+1

Pouvez-vous implémenter les info-bulles pour les cases à cocher activées? –

Répondre

1

Ran Wainstein a été implémenté l'info-bulle pour chaque élément dans le contrôle de zone de liste. Cela peut également être étendu au contrôle Check Box Box.

MyCheckListBox.h

class CMyCheckListBox : public CCheckListBox 
{ 
    DECLARE_DYNAMIC(CMyCheckListBox) 

public: 
    CMyCheckListBox(){}; 
    virtual ~CMyCheckListBox(){}; 
    afx_msg int OnToolHitTest(CPoint point, TOOLINFO * pTI) const; 
    UINT ItemFromPoint2(CPoint pt, BOOL& bOutside) const; 
    BOOL OnToolTipText(UINT id, NMHDR * pNMHDR, LRESULT * pResult); 

protected: 
    virtual void PreSubclassWindow(); 
    DECLARE_MESSAGE_MAP() 
}; 

MyCheckListBox.cpp
Cela ne fonctionnera que pour les chaînes Unicode.

IMPLEMENT_DYNAMIC(CMyCheckListBox, CCheckListBox) 

BEGIN_MESSAGE_MAP(CMyCheckListBox, CCheckListBox) 
    ON_NOTIFY_EX_RANGE(TTN_NEEDTEXT, 0, 0xFFFF, OnToolTipText) 
END_MESSAGE_MAP() 

void CMyCheckListBox::PreSubclassWindow() { 
    CCheckListBox::PreSubclassWindow(); 
    EnableToolTips(TRUE); 
} 
int CMyCheckListBox::OnToolHitTest(CPoint point, TOOLINFO * pTI) const{ 
    int row; 
    RECT cellrect; 
    BOOL tmp = FALSE; 
    row = ItemFromPoint(point,tmp); 
    if (row == -1) 
     return -1; 
    GetItemRect(row,&cellrect); 
    pTI->rect = cellrect; 
    pTI->hwnd = m_hWnd; 
    pTI->uId = (UINT)((row)); 
    pTI->lpszText = LPSTR_TEXTCALLBACK; 
    return pTI->uId; 
} 
BOOL CMyCheckListBox::OnToolTipText(UINT id, NMHDR * pNMHDR, LRESULT * pResult){ 
    TOOLTIPTEXTW* pTTTW = (TOOLTIPTEXTW*)pNMHDR; 
    CString strTipText; 
    UINT nID = pNMHDR->idFrom; 

    GetText(nID ,strTipText); 
    lstrcpyn(pTTTW->szText, strTipText, 80); 

    *pResult = 0; 
    return TRUE;  
} 
UINT CMyCheckListBox::ItemFromPoint2(CPoint pt, BOOL& bOutside) const{ 
    int nFirstIndex, nLastIndex; 
    nFirstIndex = GetTopIndex(); 
    nLastIndex = nFirstIndex + GetCount(); 
    bOutside = TRUE; 
    CRect Rect; 
    int nResult = -1; 
    for (int i = nFirstIndex; nResult == -1 && i <= nLastIndex; i++){ 
     if (GetItemRect(i, &Rect) != LB_ERR){ 
      if (Rect.PtInRect(pt)){ 
       nResult = i; 
       bOutside = FALSE; 
      } 
     } 
    } 
    return nResult; 
} 

enfin mettre en œuvre Liste de contrôle commande boîte dans la boîte de dialogue de sortie box.The correspondant est

enter image description here