2015-04-06 54 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

如何在工具提示多行上获取文本?

编辑:我也使用以下。 仍然是同样的结果。

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

回答

2

你可以得到多行工具提示使用换行符 - charecters与SetMaxTipWidth()设置为一个较大的值。如果呼叫SetMaxTipWidth()的值较小,则在满足空格字符时会自动分成多行。

你继承你的提示/信息提示,以便使用它:

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 2015-04-06 09:35:45

+0

你继承你的提示。看我的例子 – 2015-04-06 09:48:52

相关问题