2015-04-06 3 views
1

Поскольку текст в моем списке очень большой, я пытаюсь получить многострочную подсказку в элементе управления списком.Как получить многострочную подсказку для управления списком в диалоговом окне?

BOOL CTestDlg::OnInitDialog() 
{ 
    CDialogEx::OnInitDialog(); 

    mylist.EnableToolTips(TRUE); 
    mylist.SetExtendedStyle(LVS_EX_INFOTIP | mylist.GetExtendedStyle()); 

    mylist.InsertColumn(0, L"suri", LVCFMT_LEFT, 10000); 
    CString str1 = L"nonNegativeInteger GetVehicleOwnerHolderByRegNumAndDateResponse.GetVehicleOwnerHolderByRegNumAndDateResult[optional].GetVehicleOwnerHolderByRegNumAndDateResultType.VHOwnerHolderResponse.VHOwnerHolderResponseType.Body.VehicleCountries.VehicleCountriesType.VehicleCountry[1, unbound].VehicleCountryType.VehCountryReplies.VehCountryRepliesType.VehCountryReply[1, unbound].Messages[optional].Message[1, unbound].MessageType.MessageCode"; 
    for (int i = 0; i < 20 ; i++) { 
     CString str2; 
     str2.Format(L"%d",i); 
     str2 = str2 + str1; 
     mylist.InsertItem(LVIF_TEXT | LVIF_PARAM, i, str2, 0, 0, 0, NULL); 
    } 

    return TRUE; // return TRUE unless you set the focus to a control 
} 

Я получаю следующий вывод, который является усеченным текстом. Полный текст отсутствует. enter image description here

Как получить текст на всплывающей подсказке многострочной?

EDIT: Я использовал также также. еще такой же результат.

CToolTipCtrl* pToolTip = AfxGetModuleThreadState()->m_pToolTip; 
    if (pToolTip) 
     pToolTip->SetMaxTipWidth(SHRT_MAX); 

ответ

2

Вы можете получить многострочные всплывающие подсказки с помощью перевода строки-charecters с SetMaxTipWidth() набором для большого значения. И при вызове SetMaxTipWidth() с небольшим значением, он автоматически разбивается на несколько строк при встрече с символом пробела.

Вы должны создать подкласс вашей подсказки/InfoTip для того, чтобы использовать его:

BEGIN_MESSAGE_MAP(CListCtrl_InfoTip, CListCtrl) 
    ON_NOTIFY_REFLECT_EX(LVN_GETINFOTIP, OnGetInfoTip) 
    ON_NOTIFY_EX(TTN_NEEDTEXTA, 0, OnToolNeedText) 
    ON_NOTIFY_EX(TTN_NEEDTEXTW, 0, OnToolNeedText) 
END_MESSAGE_MAP() 

void CListCtrl_InfoTip::PreSubclassWindow() 
{ 
    CListCtrl::PreSubclassWindow(); 
    SetExtendedStyle(LVS_EX_INFOTIP | GetExtendedStyle()); 
} 

BOOL CListCtrl_InfoTip::OnGetInfoTip(NMHDR* pNMHDR, LRESULT* pResult) 
{ 
    // Will only request tooltip for the label-column 
    NMLVGETINFOTIP* pInfoTip = (NMLVGETINFOTIP*)pNMHDR; 
    CString tooltip = GetToolTipText(pInfoTip->iItem, pInfoTip->iSubItem); 
    if (!tooltip.IsEmpty()) 
    { 
     _tcsncpy(pInfoTip->pszText, static_cast<LPCTSTR>(tooltip), pInfoTip->cchTextMax); 
    } 
    return FALSE; // Let parent-dialog get chance 
} 

BOOL CListCtrl_InfoTip::OnToolNeedText(UINT id, NMHDR* pNMHDR, LRESULT* pResult) 
{ 
... 
    // Break tooltip into multiple lines if it contains newlines (\r\n) 
    CToolTipCtrl* pToolTip = AfxGetModuleThreadState()->m_pToolTip; 
    if (pToolTip) 
     pToolTip->SetMaxTipWidth(SHRT_MAX); 
... 
} 
+0

смотрите мой раздел редактирования – Suri

+0

вам нужен подкласс вашей подсказки. см. мой пример –

Смежные вопросы