Microsoft KB Archive/149709

= PRB: Incorrect CListCtrl Painting During Label Editing =

Article ID: 149709

Article Last Modified on 11/21/2006

-

APPLIES TO

 Microsoft Foundation Class Library 4.2, when used with:  Microsoft Visual C++ 2.1

 Microsoft Visual C++ 2.2

 Microsoft Visual C++ 4.0 Standard Edition

 Microsoft Visual C++ 4.1 Subscription</li></ul> </li></ul>

-

<div class="notice_section">

This article was previously published under Q149709

<div class="symptoms_section">

SYMPTOMS
A label-editing enabled List View control with callback items (the application stores the text), may show selected items incorrectly highlighted when labels are edited in place. When label editing changes the length of the text, clearing the item selection and re-selecting it may cause the highlighted bar to span the length of the original text.

<div class="cause_section">

CAUSE
The functionality to show the highlighted bar resides in the List View control. In this case, the control does not calculate the new size of the highlighted bar for the edited label.

<div class="resolution_section">

RESOLUTION
At the end of label editing, call the CListCtrl::SetItem function to make the control calculate the size of the just edited item. This function sets some or all of a list view item's attributes.

<div class="status_section">

STATUS
This behavior is by design.

<div class="moreinformation_section">

MORE INFORMATION
This problem can be seen in the MSDN sample, MFCLIST. The sample demonstrates a simple list view control implemented with MFC. Editing any of the "Address" column labels and changing the text length demonstrates the problem.

Sample Code
The following code demonstrates how to correct the behavior:

void CMyDialog::OnEndLabelEdit (NMHDR* pNMHDR, LRESULT* pResult) {   LV_DISPINFO* pLvdi = (LV_DISPINFO*)pNMHDR;

// The text is maintained by the application, so first update it

// Set up the item, to reset its text LV_ITEM lvi; lvi.mask = LVIF_TEXT; lvi.iItem=pLvdi->item.iItem; lvi.iSubItem = 0; lvi.pszText = LPSTR_TEXTCALLBACK;

// Call CListCtrl::SetItem, to force recalculation of the text length m_ListCtl.SetItem ( &lvi );

*pResult = 0; }

Additional query words: 2.10 2.20 3.10 3.20 4.00 4.10 LPSTR_TEXTCALLBACK edit highlight MFCList

Keywords: kblistview kbprb kbuidesign KB149709

-

[mailto:TECHNET@MICROSOFT.COM Send feedback to Microsoft]

© Microsoft Corporation. All rights reserved.