August 10th, 2009 09:38 AM
#1
Adding columns to CListCtrl
Hi all,
I'm adding 12 columns to a list control as follows:
Code:
LVCOLUMN lvColumn;
int i=0;
lvColumn.iImage = 1;
lvColumn.mask = LVCF_FMT | LVCF_TEXT | LVCF_IMAGE | LVCF_WIDTH;
lvColumn.fmt = LVCFMT_BITMAP_ON_RIGHT | LVCF_IMAGE;
lvColumn.cx = 100;
lvColumn.pszText = "Column 1";
if ( m_ListCtrlCallsHistory.InsertColumn( i++, &lvColumn ) == -1 )
return FALSE;
lvColumn.mask = LVCF_FMT | LVCF_TEXT | LVCF_IMAGE | LVCF_WIDTH;
lvColumn.fmt = LVCFMT_BITMAP_ON_RIGHT | LVCF_IMAGE;
lvColumn.cx = 130;
lvColumn.pszText = "Column 2";
if ( m_ListCtrlCallsHistory.InsertColumn( i++, &lvColumn ) == -1 )
return FALSE;
// Adding Column 3,4,5,6,7,.....
I've specified that I would like the icon to be on the right hand side of the text and it seems to work fine for all the columns execept of the first 1.
Can someone please explain how can I put my image on the right side of the text in the first column???
Many thanks!!!!
Last edited by Salvadoravi; August 10th, 2009 at 10:29 AM .
August 10th, 2009 07:07 PM
#2
Re: Adding columns to CListCtrl
It looks like it's a problem with the control.
Here's a workaround:
Insert a dummy column at index 0 and set its width to 0.
Add a HDN_ITEMCHANGING notification handler and if the changed item has an index of 0, set it's column width back to 0. This ensures that the user can't uncover the hidden column.
Not necessarily pretty, but it seems to work.
Code:
void CColumnImageDlg::CreateColumns( )
{
m_ImageList.Create( ::GetSystemMetrics(SM_CXSMICON), ::GetSystemMetrics(SM_CYSMICON), ILC_COLOR4 , 0, 0 );
m_ImageList.Add( ::AfxGetApp( )->LoadIcon( IDI_ICON1 ) );
m_ImageList.Add( ::AfxGetApp( )->LoadIcon( IDI_ICON1 ) );
m_ListCtrl.SetImageList( &m_ImageList, LVSIL_SMALL );
LVCOLUMN lvColumn;
int nIndex = 0;
lvColumn.iImage = 0;
lvColumn.mask = LVCF_FMT | LVCF_TEXT | LVCF_IMAGE | LVCF_WIDTH;
lvColumn.fmt = LVCFMT_LEFT | LVCFMT_BITMAP_ON_RIGHT | LVCF_IMAGE;
lvColumn.cx = 0;
lvColumn.pszText = _T( "Column 1" );
m_ListCtrl.InsertColumn( nIndex, &lvColumn );
lvColumn.cx = 100;
lvColumn.pszText = _T( "Column n" );
for ( nIndex = 1; nIndex < 5; nIndex++ )
{
m_ListCtrl.InsertColumn( nIndex, &lvColumn );
}
}
void CColumnImageDlg::OnHdnItemchangingList1(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMHEADER phdr = reinterpret_cast <LPNMHEADER>(pNMHDR);
if ( phdr->iItem == 0 )
{
phdr->pitem->cxy = 0;
}
*pResult = 0;
}
August 11th, 2009 04:33 AM
#3
Re: Adding columns to CListCtrl
Posting Permissions
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts
Forum Rules
Click Here to Expand Forum to Full Width
Bookmarks