2008-09-30 12 views
6

में एक बहु लाइन टूलटिप कैसे प्राप्त करूं, अभी मेरे पास एक टूल टिप है जो एक संपादन बॉक्स पर होवर करते समय पॉप अप करता है। समस्या यह है कि इस टूल टिप में कई त्रुटि संदेश हैं और वे सभी एक लंबी लाइन में हैं। मुझे प्रत्येक त्रुटि संदेश अपनी लाइन पर होना चाहिए। त्रुटि संदेश एक सीएसटींग में निहित एक नई लाइन के साथ निहित हैं।मैं एमएफसी

मेरा मौजूदा कोड नीचे है।

BOOL OnToolTipText(UINT, NMHDR* pNMHDR, LRESULT* pResult) 
{ 
    ASSERT(pNMHDR->code == TTN_NEEDTEXTA || pNMHDR->code == TTN_NEEDTEXTW); 
    // need to handle both ANSI and UNICODE versions of the message 
    TOOLTIPTEXTA* pTTTA = (TOOLTIPTEXTA*)pNMHDR; 
    TOOLTIPTEXTW* pTTTW = (TOOLTIPTEXTW*)pNMHDR; 
    // TCHAR szFullText[256]; 
    CString strTipText=_T(""); 
    UINT nID = pNMHDR->idFrom; 
    if (pNMHDR->code == TTN_NEEDTEXTA && (pTTTA->uFlags & TTF_IDISHWND) || 
     pNMHDR->code == TTN_NEEDTEXTW && (pTTTW->uFlags & TTF_IDISHWND)) 
    { 
     // idFrom is actually the HWND of the tool 
     nID = ::GetDlgCtrlID((HWND)nID); 
    } 

    //m_errProjAccel[ch] contains 1 or more error messages each seperated by a new line. 
    if((int)nID >= ID_PROJECTED_ACCEL1 && (int)nID < ID_PROJECTED_ACCEL1 + PROJECTED_ROWS -1) { 
     int ch = nID - ID_PROJECTED_ACCEL1; 
     strTipText = m_errProjAccel[ch]; 
    } 


#ifndef _UNICODE 
    if (pNMHDR->code == TTN_NEEDTEXTA) 
     lstrcpyn(pTTTA->szText, strTipText, sizeof(pTTTA->szText)/sizeof(pTTTA->szText[0])); 
    else 
     _mbstowcsz(pTTTW->szText, strTipText, sizeof(pTTTA->szText)/sizeof(pTTTA->szText[0])); 
#else 
    if (pNMHDR->code == TTN_NEEDTEXTA) 
     _wcstombsz(pTTTA->szText, strTipText, sizeof(pTTTA->szText)/sizeof(pTTTA->szText[0])); 
    else 
     lstrcpyn(pTTTW->szText, strTipText, sizeof(pTTTA->szText)/sizeof(pTTTA->szText[0])); 
#endif 
    *pResult = 0; 

    // bring the tooltip window above other popup windows 
    ::SetWindowPos(pNMHDR->hwndFrom, HWND_TOP, 0, 0, 0, 0, 
     SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE|SWP_NOOWNERZORDER); 

    return TRUE; // message was handled 
} 

उत्तर

10

बनाना बहु टूलटिप्स MSDN लाइब्रेरी में here समझाया गया है - "कार्यान्वयन बहुपंक्ति ToolTips" अनुभाग पढ़ें। TTN_GETDISPINFO अधिसूचना के जवाब में एकाधिक लाइनों का उपयोग करने के लिए मजबूर करने के लिए आपको टूलटिप नियंत्रण में TTM_SETMAXTIPWIDTH संदेश भेजना चाहिए। अपनी स्ट्रिंग में आपको \r\n के साथ लाइनों को अलग करना चाहिए।

इसके अलावा, यदि आपका टेक्स्ट 80 से अधिक वर्ण हैं, तो आपको NMTTDISPINFO संरचना का उपयोग szText सरणी में कॉपी करने के बजाय उपयोग करना चाहिए।

+0

मैं \ n का उपयोग कर रहा था। मैंने इसे \ r \ n में बदल दिया लेकिन ऐसा लगता है कि यह मदद नहीं करता है। – JonDrnek

+0

मैंने पाया कि टूलटिप्स मान्य लाइन ब्रेक के रूप में \ n, \ r \ n, और \ r स्वीकार करते हैं। मैं उन्हें एक ही टूलटिप में मिश्रण करने में सक्षम हूं। यह सॉफ़्टवेयर में बग/असंगतताओं के कारण है जिसे हम ठीक करेंगे, लेकिन यह काम करता है। – Aardvark

+0

lpszText का उपयोग करने के लिए आप ऐसा कर सकते हैं: '' 'pTTT-> lpszText = const_cast (static_cast (strTipText));' '' – Mangs

संबंधित मुद्दे