Re: SetColumnWidth fails in virtual CListCtrl (only in comctl32.dll v6
I don' tthink you have to go to all this trouble. I just tried one of my
virtual list controls and I didn't do any of that stuff (just set Owner Data
property). I didn't set the width of any of the columns and when I double
click on the divider bar they do resize, but, of course, only based on the
values that are displayed on the screen (since it doesn't really know about
the other values). I used SetItemCountEx() (I don't set any flags so maybe
it's not a big deal).
I never set the column width anywhere that I can see.
Tom
"Furas" <Furas@discussions.microsoft.com> wrote in message
news:7E2720F6-E544-4F26-AB0E-148401291BDD@microsoft.com...
Hi.
I've found a problem with setting width of a first column in virtual
(LVS_OWNERDATA style) listview control in a report mode (LVS_REPORT
style).
Using LVSCW_AUTOSIZE value as a width parameter causes control to
incorrectly
compute the width which leads to a text truncation.
This works correctly in comctl32.dll prior to 6.0 (5.82), as well as in
comctl32.dll 6.10 (Vista).
To simply reproduce this behavior using VS2005, follow these steps:
1. create a dialog-based MFC application
2. insert a listcontrol on a main dialog, set properties [Owner Data =
True], [View = Report]
3. create a member variable for a control, say "m_list"
4. In YourDialog::OnInitDialog, insert a column and set an item count
...
// TODO: Add extra initialization here
m_list.InsertColumn(0, L"First column"); // arbitrary name
m_list.SetItemCount(10); // arbitrary count
m_list.SetColumnWidth(0, 100); // arbitrary width
return TRUE; // return TRUE unless you set the focus to a control
5. using a property manager, define a handler for LVN_GETDISPINFO
notification
void YourDialog::OnLvnGetdispinfoList1(NMHDR *pNMHDR, LRESULT *pResult)
{
LV_ITEM& item = ((LV_DISPINFO*)pNMHDR)->item;
if (item.mask & LVIF_TEXT)
{
item.mask = LVIF_TEXT;
_tcsncpy(item.pszText, L"ABCD", item.cchTextMax - 1);
}
else
{
item.mask = 0;
}
item.stateMask = 0;
*pResult = 0;
}
6. build and run the application, ensure you're using XP-look (themed
controls in comctl32.dll v6.0)
7. double-click on a column divider to simulate a SetColumnWidth(0,
LVSCW_AUTOSIZE) message
8. you should see the "ABCD" text as "AB..."
I would be very pleased, if somebody can reproduce this behavior, to
confirm
this bug. I didn't find any similar bug reports anywhere, which frightens
me
a lot ;)
Of course, I would appreciate any workaround as well.
Thanks in advance