各位老大,小弟要做一个包含CListCtrl的对话框。和一般对话框不一样的是,里面的CListCtrl含有
3列,第一列是个CheckBox,第二列是个文本框,里面显示文件名,如果需要的话,这个框
里面的内容可以更改。第三列显示该文件的大小。对话框上面需要的按钮可以完成添加文件,删除文件,向上移动文件,向下移动文件等功
能。如果哪位老大有源代码可以修改的话最好了,让小弟改一改,抄上去就可以交差了。谢谢各位。

解决方案 »

  1.   

    完全和你的要求的不知道有没有,不过你可以多找几个具有单独实现的例子看看,就很容易做了。
    http://www.vccode.com/file_show.php?id=2130
    到www.vckbase.com
    www.codeguru.com找有你需要的东东
      

  2.   

    m_DefineURL.SetExtendedStyle(m_list.GetExtendedStyle( )|LVS_EX_GRIDLINES|LVS_EX_CHECKBOXES | LVS_EX_FULLROWSELECT);//设置checkbox等
    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上
    大概思路就是这样,如果有什么问题给我发短消息
    :)
      

  3.   

    大哥,小弟是新手,有点完全不懂您在说什么。麻烦您写个最简单的对话框程序贴上来。
    或者发到小弟的信箱。
    [email protected]
      

  4.   

    假设m_list是你的控件
    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 );
    我上面给你的例子和你的要求差不多了,仔细看了吗?
      

  5.   

    谢谢老大,小弟看了,但不是很懂。小弟从来都是改我们公司自己的程序,要自己写就有些困难了。而且看程序的能力不不强,实在是惭愧。让控件有CheckBox小弟明白,可是如何让第二列可以具有编辑属性呢?当鼠标按到上面的时候,就可以修改文本框中间的内容。小弟是在是从来都没有做过GUI.老大您要是有MSN的话,把[email protected]给加上吧,大家一起聊聊,以后也好有个照应。
      

  6.   

    关键是edit加入以后 不能获得这个行 改变后的edit在这个行的数据
    意思就是edit值变了 但是GetItemText后的值还是没有变的  这个很烦人我以前也做过这个 没实现 就改右键菜单了  我现在都不爽  看老外写的程序又头疼不知道 msdn的高手 能不能做一个完全易懂的例子
    我也帮不了楼住了 我例子到是有 比如加如combox  点了combox选了其他的项但是listctl
    本身这个行的这一列并没有变  我也希望高手说下怎么加 combox
    原理说下也可以
      

  7.   

    http://www.codeproject.com/listctrl/nirs2000.asp?df=100&forumid=2501&exp=0&select=644149上面这个可以在list中插入edit、combox。我用过了,很好,没有bug。
      

  8.   

    至于你要插入checkbox,你可以通过设置listctrl的属性EX_CHECKBOXES来实现,例如:
    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 );
      

  9.   

    让CListCtrl的SubItem也具有编辑功能:
    要重载一个文本框,然后在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
    }