各位老大,小弟要做一个包含CListCtrl的对话框。和一般对话框不一样的是,里面的CListCtrl含有
3列,第一列是个CheckBox,第二列是个文本框,里面显示文件名,如果需要的话,这个框
里面的内容可以更改。第三列显示该文件的大小。对话框上面需要的按钮可以完成添加文件,删除文件,向上移动文件,向下移动文件等功
能。如果哪位老大有源代码可以修改的话最好了,让小弟改一改,抄上去就可以交差了。谢谢各位。
3列,第一列是个CheckBox,第二列是个文本框,里面显示文件名,如果需要的话,这个框
里面的内容可以更改。第三列显示该文件的大小。对话框上面需要的按钮可以完成添加文件,删除文件,向上移动文件,向下移动文件等功
能。如果哪位老大有源代码可以修改的话最好了,让小弟改一改,抄上去就可以交差了。谢谢各位。
http://www.vccode.com/file_show.php?id=2130
到www.vckbase.com
www.codeguru.com找有你需要的东东
LV_COLUMN lvColunm;
lvColunm.mask=LVCF_TEXT|LVCF_FMT|LVCF_WIDTH;
lvColunm.fmt=LVCFMT_CENTER;
lvColunm.cx=150;
lvColunm.pszText="you want to insert";
m_list.InsertColumn(0,&lvColunm);
第二列是可编辑的,在ListCtrl的SubItem位置创建一个Edit的子窗口,用这个子窗口来取得对SubItem文本的改变,将要创建的Edit子窗口所在的位置和宽度,它要根据SubItem的长度来确定大小,然后根据焦点来把Edit的内容放到listCtrl的SubItem上
大概思路就是这样,如果有什么问题给我发短消息
:)
或者发到小弟的信箱。
[email protected]
CString str;
m_list.InsertItem(i,"");//你先用InsertColumn()插入列后,就用这句插入第i行
m_list.SetItemText(i,0,str);//接着就设置刚插入行的第1列的数据
m_list.SetItemText(i,2,str);//刚插入行的第3列的数据
m_list.SetItemText(i,1,str);//刚插入行的第2列的数据
//下面这句就是让控件有checkbox
m_list.SetExtendedStyle(m_list.GetExtendedStyle() | LVS_EX_CHECKBOXES );
我上面给你的例子和你的要求差不多了,仔细看了吗?
意思就是edit值变了 但是GetItemText后的值还是没有变的 这个很烦人我以前也做过这个 没实现 就改右键菜单了 我现在都不爽 看老外写的程序又头疼不知道 msdn的高手 能不能做一个完全易懂的例子
我也帮不了楼住了 我例子到是有 比如加如combox 点了combox选了其他的项但是listctl
本身这个行的这一列并没有变 我也希望高手说下怎么加 combox
原理说下也可以
ListView_SetExtendedListViewStyleEx(m_ctrListTaxonomy.GetSafeHwnd(),
WS_CHILD|WS_VISIBLE|LVS_REPORT|LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES|LVS_EX_CHECKBOXES|LVS_EX_INFOTIP,
WS_CHILD|WS_VISIBLE|LVS_REPORT|LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES|LVS_EX_CHECKBOXES|LVS_EX_INFOTIP );
要重载一个文本框,然后在LVN_BEGINLABELEDIT时改变文本框位置。
CInEdit m_InEdit; if( ( GetStyle() & LVS_TYPEMASK ) == LVS_REPORT && ( m_nEditSubItem != 0 ) )
{
HWND hwndEdit;
CRect rtBound;
CString strText; hwndEdit = (HWND)SendMessage( LVM_GETEDITCONTROL );
GetSubItemRect( pDispInfo->item.iItem, m_nEditSubItem, LVIR_LABEL, rtBound );
m_InEdit.SubclassWindow( hwndEdit );
m_InEdit.m_left = rtBound.left;
strText = GetItemText( pDispInfo->item.iItem, m_nEditSubItem );
m_InEdit.SetWindowText( strText );
}void CInEdit::OnWindowPosChanging(WINDOWPOS FAR* lpwndpos)
{
CRect rtClient; lpwndpos->x = m_left; // m_left在LVN_BEGINLABELEDIT中设置 CEdit::OnWindowPosChanging(lpwndpos);
// TODO: Add your message handler code here
}