Re: CListCtrl size at runtime
 
I think, with a listbox, you can do something a simple as:
  // Set the horizontal scroll width
  int oldwidth = m_ListBox.GetHorizontalExtent();
  CDC* pDC = m_ListBox.GetWindowDC();
  if (pDC) {
       int newwidth = pDC->GetTextExtent(msg, _tcslen(msg)).cx;
       m_ListBox.ReleaseDC(pDC);
       if (newwidth > oldwidth)
            m_ListBox.SetHorizontalExtent(newwidth);
  }
   // Delete old entries
   if (m_ListBox.GetCount() >= 300)
        m_ListBox.DeleteString(0);
    // Add the new string at the end
    m_ListBox.AddString(msg);
 }
You could do the same thing with a list control using:
if(m_ListCtrl.GetItemCount() == MAX_ITEMS)
    m_ListCtrl.DeleteItem(0);
m_ListCtrl.AddItem(...);
Of course if it's a virtual list control you would simply delete the content 
from your external source and leave the number of items in the list constant 
(I.E., remove one and add one to external content so list ctrl stays the 
same size).  So with something like a CObArray you could do:
if(m_MyArray.GetCount() == MAX_ITEMS)
    delete m_MyArray.GetAt(0);  // Delete data that was stored in the array
    m_MyArray.RemoveAt(0);  // Remove 1st item
    m_MyArray.Add(pNewInfo); // Add the new one at the end
    m_ListCtrl.UpdateWindow();
}
else {
     m_MyArray.Add(pNewInfo);  // Add the new item
     m_ListCtrl.SetItemCountEx(m_MyArray.GetCount()); // Let it grow until 
we get to MAX_ITEMS
}
The list control would never know any difference.  Who said MFC is 
difficult.  It's easy breezy... flexible and fast :o)
Tom
"Joseph M. Newcomer" <newcomer@flounder.com> wrote in message 
news:tjp9i4hf00jg8km3d53ar2ittnaql5jp2t@4ax.com...
See below...
On Tue, 18 Nov 2008 20:07:01 -0800, Gary <Gary@discussions.microsoft.com> 
wrote:
Thanks Joe.
In my case when I startup my CListCtrl will always be empty. So I don't 
have
to worry about loading items into the control.
I keep on receiving data at runtime and add it to the CListCtrl and when 
the
user closes the control I don't have to retain any data.
I just need to save the data to a text file if the user prompts me to do 
so.
****
That's trivial.  However, as you add more and more items, you may find 
that the time to
add an item does not remain constant (I haven't tried this for a list 
control).  We did
create a limited-length listbox, where adding the (n+1) element deleted 
the 0th element.
The reason for this was that "old history" didn't matter.  I generalized 
this in my
Logging ListBox, by setting a "mark", so the "startup" logging sequence 
was retained (and
was never lost), but data elements that followed were limited.
However, your particular need screams "virtual list control" and I would 
suggest that is
the best approach.  Tom Serface is our virtual control expert in this 
group, and can
probably point you at the best code for the job.
joe
****