Ngay bây giờ, tôi có một mẹo công cụ bật lên khi tôi di chuột qua hộp chỉnh sửa. Vấn đề là mẹo công cụ này chứa nhiều thông báo lỗi và tất cả chúng đều nằm trong một hàng dài. Tôi cần phải có mỗi thông báo lỗi trên một dòng riêng. Các thông báo lỗi được chứa trong một CString với một dòng mới phân tách chúng.Làm thế nào để tôi có một chú giải công cụ đa dòng trong MFC
Mã hiện tại của tôi ở bên dưới.
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
}
Tôi đang sử dụng \ n. Tôi đã thay đổi nó thành \ r \ n nhưng có vẻ như nó không giúp được gì. – JonDrnek
Tôi thấy rằng các chú giải công cụ chấp nhận \ n, \ r \ n và \ r làm các ngắt dòng hợp lệ. Tôi thậm chí đã có thể trộn chúng trong cùng một tooltip. Điều này là do lỗi/mâu thuẫn trong phần mềm mà chúng tôi sẽ khắc phục, nhưng nó hoạt động. – Aardvark
Để sử dụng lpszText bạn có thể làm như sau: '' 'pTTT-> lpszText = const_cast (static_cast (strTipText));' '' –
Mangs