本帖最后由 nurdan 于 2010-02-27 19:18:21 编辑

解决方案 »

  1.   

    1.标准的List Ctrl是不带复选框功能的,你是不是用的别人的扩展类呢.
    2.你是在定义全局变量,这个全局变量不要定义在stdafx文件里,最好是放到应用程序类App类的头文件和CPP中,因为你定义在stdafx.cpp里,这个文件本身不会构造对象,所以LPTest不会分配存储空间的,在程序其他地方访问时会出错.
      

  2.   


    不是别的类 就是这样改的 LONG lStyle3;
        lStyle3 = GetWindowLong(Dlg4.MyL3.m_hWnd, GWL_STYLE);//获取当前窗口style
        lStyle3 &= ~LVS_TYPEMASK; //清除显示方式位
        lStyle3 |= LVS_REPORT; //设置style
        SetWindowLong(Dlg4.MyL3.m_hWnd, GWL_STYLE, lStyle3);//设置style
    DWORD dwStyle3 = Dlg4.MyL3.GetExtendedStyle();
        dwStyle3 |= LVS_EX_FULLROWSELECT;//选中某行使整行高亮(只适用与report风格的listctrl)
        dwStyle3 |= LVS_EX_GRIDLINES;//网格线(只适用与report风格的listctrl)
    dwStyle3 |= LVS_EX_CHECKBOXES; //复选框
         // dwStyle |= LVS_EX_CHECKBOXES;//item前生成checkbox控件
        Dlg4.MyL3.SetExtendedStyle(dwStyle3); //设置扩展风格
      

  3.   

    1.List Control 的Style我加了LVS_EX_CHECKBOXES ,主程序一直更新LIST里面的内容~~~问题出现在内容被更新后复选框的选择也没了~~~ _____________________________________
    更新后,你也要再对每一行需要设置check的重新设置一下
      

  4.   

    怎么得到 Checkbox 是否选中了?
      

  5.   


    void CDlg04::OnLvnItemchangingList1(NMHDR *pNMHDR, LRESULT *pResult)
    {
    LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);
    Checked = MyL3.GetCheck(pNMLV->iItem);
    *pResult = 0;
    }void CDlg04::OnHdnItemchangedList1(NMHDR *pNMHDR, LRESULT *pResult)
    {
    LPNMHEADER phdr = reinterpret_cast<LPNMHEADER>(pNMHDR);
    if(Checked)
    MyL3.SetCheck(phdr->iItem);
    *pResult = 0;
    }
    这样写 也不行
      

  6.   


    ----内容被更新后,如果复选框的选择还有效,哪才是有问题呢!
    ----因为复选框的选择,是对以前的内容的选择,内容被更新后,要重新选择。
    ----List Control 的Style 加 LVS_EX_CHECKBOXES,只是表示List Control有复选框这个栏目。
      

  7.   


    如果楼主想实现这个功能,在内容被更新前,保存全部的GetCheck值,内容被更新后,再重新SetCheck