| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 | 
							- #include "stdafx.h"
 
- #include "HListBox.h"
 
- #ifdef _DEBUG
 
- #define new DEBUG_NEW
 
- #undef THIS_FILE
 
- static char THIS_FILE[] = __FILE__;
 
- #endif
 
- /////////////////////////////////////////////////////////////////////////////
 
- // CHListBox
 
- CHListBox::CHListBox()
 
- {
 
-  width = 0;
 
- }
 
- CHListBox::~CHListBox()
 
- {
 
- }
 
- BEGIN_MESSAGE_MAP(CHListBox, CListBox)
 
- 	//{{AFX_MSG_MAP(CHListBox)
 
- 		// NOTE - the ClassWizard will add and remove mapping macros here.
 
- 	//}}AFX_MSG_MAP
 
- END_MESSAGE_MAP()
 
- /////////////////////////////////////////////////////////////////////////////
 
- // CHListBox message handlers
 
- void CHListBox::updateWidth(LPCTSTR s)
 
-     {
 
-      CClientDC dc(this);
 
-      CFont * f = CListBox::GetFont();
 
-      dc.SelectObject(f);
 
-      CSize sz = dc.GetTextExtent(s, (int)_tcslen(s));
 
-      sz.cx += 3 * ::GetSystemMetrics(SM_CXBORDER);
 
-      if(sz.cx > width)
 
- 	 { /* extend */
 
- 	  width = sz.cx;
 
- 	  CListBox::SetHorizontalExtent(width);
 
- 	 } /* extend */
 
-     }
 
- int CHListBox::AddString(LPCTSTR s)
 
-     {
 
-      int result = CListBox::AddString(s);
 
-      if(result < 0)
 
- 	 return result;
 
-      updateWidth(s);
 
-      return result;
 
-     }
 
- int CHListBox::InsertString(int i, LPCTSTR s)
 
-     {
 
-      int result = CListBox::InsertString(i, s);
 
-      if(result < 0)
 
- 	 return result;
 
-      updateWidth(s);
 
-      return result;
 
-     }
 
- void CHListBox::ResetContent()
 
-     {
 
-      CListBox::ResetContent();
 
-      width = 0;
 
-     }
 
- int CHListBox::DeleteString(int n)
 
-     {
 
-      int result = CListBox::DeleteString(n);
 
-      if(result < 0)
 
- 	 return result;
 
-      CClientDC dc(this);
 
-      CFont * f = CListBox::GetFont();
 
-      dc.SelectObject(f);
 
-      width = 0;
 
-      for(int i = 0; i < CListBox::GetCount(); i++)
 
- 	 { /* scan strings */
 
- 	  CString s;
 
- 	  CListBox::GetText(i, s);
 
- 	  CSize sz = dc.GetTextExtent(s);
 
-           sz.cx += 3 * ::GetSystemMetrics(SM_CXBORDER);
 
- 	  if(sz.cx > width)
 
- 	      width = sz.cx;
 
- 	 } /* scan strings */
 
-      CListBox::SetHorizontalExtent(width);
 
-      return result;
 
-     }
 
 
  |