2016-05-02 35 views
0

MFCのWindowsアプリケーションで作業しています。 Check List Boxコントロールでチェックボックスを使用しています。一部のチェックボックスは無効になっています。無効になっているチェックボックスのツールヒントを実装するにはどうすればよいですか?MFCのチェックリストボックスコントロールの無効なチェックボックスのツールヒント

+2

であなたのコードの関連部分を表示します。 –

+1

有効なチェックボックスのツールヒントを実装できますか? –

答えて

1

Ran Wainsteinリストボックスコントロールの各項目のツールチップが実装されました。これはCheck List 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
これは、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; 
} 

は、最後に対応するダイアログbox.The出力にリストボックスコントロールをチェックし実装すること

enter image description here

関連する問題