1
0
Эх сурвалжийг харах

allow for text greater than 255 -- SAB

git-svn-id: svn://svn.code.sf.net/p/ditto-cp/code/trunk@37 595ec19a-5cb4-439b-94a8-42fb3063c22c
sabrogden 22 жил өмнө
parent
commit
71fdce7cbd
3 өөрчлөгдсөн 32 нэмэгдсэн , 23 устгасан
  1. 16 12
      QListCtrl.cpp
  2. 3 7
      QListCtrl.h
  3. 13 4
      QPasteWnd.cpp

+ 16 - 12
QListCtrl.cpp

@@ -379,7 +379,12 @@ void CQListCtrl::OnCustomdrawList(NMHDR* pNMHDR, LRESULT* pResult)
 		rcText.top++;
 		
         // Draw the text.
-        CString csText = GetItemText(nItem, 0);
+        //CString csText = GetItemText(nItem, 0);
+
+		CString csText;
+		LPTSTR lpszText = csText.GetBufferSetLength(1000);
+		GetItemText(nItem, 0, lpszText, 1000);
+		csText.ReleaseBuffer();
 
 		// set firstTenNum to the first ten number (1-10) corresponding to
 		//  the current nItem.
@@ -391,7 +396,7 @@ void CQListCtrl::OnCustomdrawList(NMHDR* pNMHDR, LRESULT* pResult)
 			rcText.left += 12;
 		}
 
-		pDC->DrawText(csText, rcText, DT_VCENTER | DT_EXPANDTABS);
+		pDC->DrawText(lpszText, rcText, DT_VCENTER | DT_EXPANDTABS);
 		
         // Draw a focus rect around the item if necessary.
         if(bListHasFocus && (rItem.state & LVIS_FOCUSED))
@@ -477,7 +482,7 @@ BOOL CQListCtrl::OnToolTipText( UINT id, NMHDR * pNMHDR, LRESULT * pResult )
 
 	// Use Item's name as the tool tip. Change this for something different.
 	// Like use its file size, etc.
-	strTipText = GetToolTipText(nID-1);
+	GetToolTipText(nID-1, strTipText);
 
 	//Replace the tabs with spaces, the tooltip didn't like the \t s
 	strTipText.Replace("\t", "  ");
@@ -665,13 +670,13 @@ void CQListCtrl::ShowFullDescription()
 	GetItemRect(nItem, rc, LVIR_BOUNDS);
 	ClientToScreen(rc);
 	m_Popup.m_Pos = CPoint(rc.left, rc.bottom);
-	m_Popup.Show( GetToolTipText(nItem) );
+	CString cs;
+	GetToolTipText(nItem, cs);
+	m_Popup.Show( cs );
 }
 
-CString CQListCtrl::GetToolTipText(int nItem)
+void CQListCtrl::GetToolTipText(int nItem, CString &csText)
 {
-	CString cs;
-
 	if((GetStyle() & LVS_OWNERDATA))
 	{
 		CWnd* pParent=GetParent();
@@ -682,16 +687,15 @@ CString CQListCtrl::GetToolTipText(int nItem)
 			info.hdr.code = NM_GETTOOLTIPTEXT;
 			info.hdr.hwndFrom = GetSafeHwnd();
 			info.hdr.idFrom = GetDlgCtrlID();
-
 			info.lItem = nItem;
-					
+			info.cchTextMax = 1000;
+			info.pszText = csText.GetBufferSetLength(1000);
+
 			pParent->SendMessage(WM_NOTIFY,(WPARAM)info.hdr.idFrom,(LPARAM)&info);
 
-			cs = info.cText;
+			csText.ReleaseBuffer();			
 		}
 	}
-
-	return cs;
 }
 
 DWORD CQListCtrl::GetItemData(int nItem)

+ 3 - 7
QListCtrl.h

@@ -22,14 +22,10 @@
 class CQListToolTipText
 {
 public:
-	CQListToolTipText()
-	{
-		memset(&cText, 0, sizeof(cText));
-	}
-
 	NMHDR hdr;
-	char cText[500];
 	long lItem;
+	LPTSTR pszText; 
+	int cchTextMax; 
 };
 
 class CQListCtrl : public CListCtrl
@@ -82,7 +78,7 @@ public:
 	BOOL SetListPos( int index );
 
 	DWORD GetItemData(int nItem);
-	CString GetToolTipText(int nItem);
+	void GetToolTipText(int nItem, CString &csText);
 
 	void SetShowTextForFirstTenHotKeys(BOOL bVal)	{ m_bShowTextForFirstTenHotKeys = bVal;	}
 

+ 13 - 4
QPasteWnd.cpp

@@ -1083,7 +1083,10 @@ void CQPasteWnd::GetDispInfo(NMHDR* pNMHDR, LRESULT* pResult)
 					cs += "** ";
 
 				cs += m_Recset.m_strText;
-				lstrcpy(pItem->pszText, cs);
+				
+				lstrcpyn(pItem->pszText, cs, pItem->cchTextMax);
+				if(cs.GetLength() > pItem->cchTextMax)
+					pItem->pszText[pItem->cchTextMax-1] = 0;
 			}
 			catch(CDaoException *e)
 			{
@@ -1122,7 +1125,12 @@ void CQPasteWnd::OnGetToolTipText(NMHDR* pNMHDR, LRESULT* pResult)
 
 	if( pInfo->lItem < 0 )
 	{
-		strcpy(pInfo->cText, "no item selected");
+		CString cs("no item selected");
+
+		lstrcpyn(pInfo->pszText, cs, pInfo->cchTextMax);
+		if(cs.GetLength() > pInfo->cchTextMax)
+			pInfo->pszText[pInfo->cchTextMax-1] = 0;
+
 		return;
 	}
 
@@ -1162,8 +1170,9 @@ void CQPasteWnd::OnGetToolTipText(NMHDR* pNMHDR, LRESULT* pResult)
 			cs += LOBYTE(m_Recset.m_lShortCut);
 		}
 
-		strcpy(pInfo->cText, cs);
-
+		lstrcpyn(pInfo->pszText, cs, pInfo->cchTextMax);
+		if(cs.GetLength() > pInfo->cchTextMax)
+			pInfo->pszText[pInfo->cchTextMax-1] = 0;
 	}
 	catch(CDaoException *e)
 	{