问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

...像这种选定1个以上的事件应该怎么写,以及自动生成的checkbox事件应怎 ...

发布网友 发布时间:2024-10-15 02:12

我来回答

1个回答

热心网友 时间:2024-10-15 20:00

1. CListCtrl 风格
      LVS_ICON: 为每个item显示大图标
      LVS_SMALLICON: 为每个item显示小图标
      LVS_LIST: 显示一列带有小图标的item
      LVS_REPORT: 显示item详细资料
      直观的理解:windows资源管理器,“查看”标签下的“大图标,小图标,列表,详细资料”
--------------------------------------------------------------------------------
2. 设置listctrl 风格及扩展风格
      LONG lStyle;
      lStyle = GetWindowLong(m_list.m_hWnd, GWL_STYLE);//获取当前窗口style
      lStyle &= ~LVS_TYPEMASK; //清除显示方式位
      lStyle |= LVS_REPORT; //设置style
      SetWindowLong(m_list.m_hWnd, GWL_STYLE, lStyle);//设置style
 
      DWORD dwStyle = m_list.GetExtendedStyle();
      dwStyle |= LVS_EX_FULLROWSELECT;//选中某行使整行高亮(只适用与report风格的listctrl)
      dwStyle |= LVS_EX_GRIDLINES;//网格线(只适用与report风格的listctrl)
      dwStyle |= LVS_EX_CHECKBOXES;//item前生成checkbox控件
      m_list.SetExtendedStyle(dwStyle); //设置扩展风格
 
      注:listview的style请查阅msdn
      http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wceshellui5/html/wce50lrflistviewstyles.asp
--------------------------------------------------------------------------------
3. 插入数据
      m_list.InsertColumn( 0, "ID", LVCFMT_LEFT, 40 );//插入列
      m_list.InsertColumn( 1, "NAME", LVCFMT_LEFT, 50 );
      int nRow = m_list.InsertItem(0, “11”);//插入行
      m_list.SetItemText(nRow, 1, “jacky”);//设置数据
--------------------------------------------------------------------------------
4. 一直选中item
    选中style中的Show selection always,或者在上面第2点中设置LVS_SHOWSELALWAYS
--------------------------------------------------------------------------------
5. 选中和取消选中一行
    int nIndex = 0;
    //选中
    m_list.SetItemState(nIndex, LVIS_SELECTED|LVIS_FOCUSED, LVIS_SELECTED|LVIS_FOCUSED);
    //取消选中
    m_list.SetItemState(nIndex, 0, LVIS_SELECTED|LVIS_FOCUSED);
 
--------------------------------------------------------------------------------
6. 得到listctrl中所有行的checkbox的状态
      m_list.SetExtendedStyle(LVS_EX_CHECKBOXES);
      CString str;
      for(int i=0; i<m_list.GetItemCount(); i++)
      {
           if( m_list.GetItemState(i, LVIS_SELECTED) == LVIS_SELECTED || m_list.GetCheck(i))
           {
                str.Format(_T("第%d行的checkbox为选中状态"), i);
                AfxMessageBox(str);
           }
      }
--------------------------------------------------------------------------------
7. 得到listctrl中所有选中行的序号
      方法一:
      CString str;
      for(int i=0; i<m_list.GetItemCount(); i++)
      {
           if( m_list.GetItemState(i, LVIS_SELECTED) == LVIS_SELECTED )
           {
                str.Format(_T("选中了第%d行"), i);
                AfxMessageBox(str);
           }
      }
      方法二:
      POSITION pos = m_list.GetFirstSelectedItemPosition();
      if (pos == NULL)
           TRACE0("No items were selected!\n");
      else
      {
           while (pos)
           {
                int nItem = m_list.GetNextSelectedItem(pos);
                TRACE1("Item %d was selected!\n", nItem);
                // you could do your own processing on nItem here
           }
      }
--------------------------------------------------------------------------------
8. 得到item的信息
      TCHAR szBuf[1024];
      LVITEM lvi;
      lvi.iItem = nItemIndex;
      lvi.iSubItem = 0;
      lvi.mask = LVIF_TEXT;
      lvi.pszText = szBuf;
      lvi.cchTextMax = 1024;
      m_list.GetItem(&lvi);
      关于得到设置item的状态,还可以参考msdn文章
      Q173242: Use Masks to Set/Get Item States in CListCtrl
      http://support.microsoft.com/kb/173242/en-us
--------------------------------------------------------------------------------
9. 得到listctrl的所有列的header字符串内容
      LVCOLUMN lvcol;
      char  str[256];
      int   nColNum;
      CString  strColumnName[4];//假如有4列
      nColNum = 0;
      lvcol.mask = LVCF_TEXT;
      lvcol.pszText = str;
      lvcol.cchTextMax = 256;
      while(m_list.GetColumn(nColNum, &lvcol))
      {
           strColumnName[nColNum] = lvcol.pszText;
           nColNum++;
      }
--------------------------------------------------------------------------------
10. 使listctrl中一项可见,即滚动滚动条
    m_list.EnsureVisible(i, FALSE);

--------------------------------------------------------------------------------
11. 得到listctrl列数
    int nHeadNum = m_list.GetHeaderCtrl()->GetItemCount();

--------------------------------------------------------------------------------
12. 删除所有列
      方法一:
         while ( m_list.DeleteColumn (0))
       因为你删除了第一列后,后面的列会依次向上移动。
      方法二:
      int nColumns = 4;
      for (int i=nColumns-1; i>=0; i--)
          m_list.DeleteColumn (i);

--------------------------------------------------------------------------------
13. 得到单击的listctrl的行列号
      添加listctrl控件的NM_CLICK消息相应函数
      void CTest6Dlg::OnClickList1(NMHDR* pNMHDR, LRESULT* pResult)
      {
           // 方法一:
          
  
          // 方法二:
         
           *pResult = 0;
      }
--------------------------------------------------------------------------------
14. 判断是否点击在listctrl的checkbox上
      添加listctrl控件的NM_CLICK消息相应函数
      void CTest6Dlg::OnClickList1(NMHDR* pNMHDR, LRESULT* pResult)
      {
           DWORD dwPos = GetMessagePos();
           CPoint point( LOWORD(dwPos), HIWORD(dwPos) );
  
           m_list.ScreenToClient(&point);
  
           LVHITTESTINFO lvinfo;
           lvinfo.pt = point;
           lvinfo.flags = LVHT_ABOVE;
    
           UINT nFlag;
           int nItem = m_list.HitTest(point, &nFlag);
           //判断是否点在checkbox上
           if(nFlag == LVHT_ONITEMSTATEICON)
           {
                AfxMessageBox("点在listctrl的checkbox上");
           }
           *pResult = 0;
      }
--------------------------------------------------------------------------------
15. 右键点击listctrl的item弹出菜单
      添加listctrl控件的NM_RCLICK消息相应函数
      void CTest6Dlg::OnRclickList1(NMHDR* pNMHDR, LRESULT* pResult)
      {
           NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
           if(pNMListView->iItem != -1)
           {
                DWORD dwPos = GetMessagePos();
                CPoint point( LOWORD(dwPos), HIWORD(dwPos) );
   
                CMenu menu;
                VERIFY( menu.LoadMenu( IDR_MENU1 ) );
                CMenu* popup = menu.GetSubMenu(0);
                ASSERT( popup != NULL );
                popup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, this );
           }
           *pResult = 0;
  }
--------------------------------------------------------------------------------
16. item切换焦点时(包括用键盘和鼠标切换item时),状态的一些变化顺序
      添加listctrl控件的LVN_ITEMCHANGED消息相应函数
      void CTest6Dlg::OnItemchangedList1(NMHDR* pNMHDR, LRESULT* pResult)
      {
           NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
           // TODO: Add your control notification handler code here
   
           CString sTemp;
 
           if((pNMListView->uOldState & LVIS_FOCUSED) == LVIS_FOCUSED &&
            (pNMListView->uNewState & LVIS_FOCUSED) == 0)
           {
                sTemp.Format("%d losted focus",pNMListView->iItem);
           }
           else if((pNMListView->uOldState & LVIS_FOCUSED) == 0 &&
               (pNMListView->uNewState & LVIS_FOCUSED) == LVIS_FOCUSED)
           {
                sTemp.Format("%d got focus",pNMListView->iItem);
           }
 
           if((pNMListView->uOldState & LVIS_SELECTED) == LVIS_SELECTED &&
            (pNMListView->uNewState & LVIS_SELECTED) == 0)
           {
                sTemp.Format("%d losted selected",pNMListView->iItem);
           }
           else if((pNMListView->uOldState & LVIS_SELECTED) == 0 &&
            (pNMListView->uNewState & LVIS_SELECTED) == LVIS_SELECTED)
           {
                sTemp.Format("%d got selected",pNMListView->iItem);
           }
   
           *pResult = 0;
      }
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
社保到期了还有时效吗 2023年河北退休人员认证时间 社保待遇资格认证有效期怎么认证 ...语法How long does it take you to get to school? 此句中“it... 海信电视初始设置后无信号 设置海信电视恢复出厂设置搜不到电视信号 海信一族电视大锅恢复设置没信号怎么? 如何用c程序读取txt文件? 成都膨胀螺丝型号 云南农信个人如何开通手机银行 有没有适于男人唱的,怎么跑调都听不出来的歌呀 推荐一些适合男的唱的、不容易跑调的、原唱是女唱的歌26161 食品级304不锈钢是否安全? 网络平台借钱利息过高怎么处理 SD卡有U1、 U2、 A1、 A2吗? 买长虹电视u1和u2,u3有什么区别 已知一个数列U1,U2,U3,…,UN,… 往往可以找到一个最小的K值和K个数a1... 从天津开车到张家口蔚县怎么走 下花园收费站到天津多少公里 ...考研二战失败,想三战考研,想考上研究生后考公务员,有什么影响!_百度... 本科临床医学生考研,事业编,公务员考试都失利,除了二战到底该怎么... "有趣的事"用英语怎么说 艾滋病已成为世界流行的传染病,死亡率高,它主要通过性行为、血液、母婴... ...位符号位),若机器数为83H,当它分别表示原码,补码,反码时,等价的十进... Android R8代码混淆(笔记) 雅虎日本怎么用? 为什么说在日本网购永远干不过实体? intel E2200CPU支持64位吗? 北京美的冰箱售后服务电话!美的维修中心 北京美的冰箱售后电话 JAVA jtree的问题 茶籽油是什么茶籽油功效与作用 右一九九六年正月二十九日寅时生辰八字 ...对齐和文字界内对齐分别是什么意思?标注文字的横向和纵向要怎么调... 地下室安装电信网所要东西是什么 中国地理学什么 ...后连桶重20千克。原来油重多少千克?桶重多少千克? 半桶水连桶重19千克,加满水后连桶重36千克,一桶水重多少千克。桶重多少... 一桶油连桶共36千克倒出一半后连桶重19千克桶中原有油多少千克桶重多少... ...油后连桶还重19千克。油重多少千克?桶重多少千克? ...连桶重20千克,这桶油原来有多少千克?桶重多少 半桶水连桶重19千克,加满水后连桶重36千克,桶重多少千克 ...一半的油,连桶称重20千克,问桶重多少千克,原来桶中的汽油重多少克... 有谁能够把《邂逅季:首席医生的小迷糊》全本txt 发给我啊? 谢谢啊... 请把 邂逅季:首席医生的小迷糊m 全本txt 发送到1205141936@qq.com... 毛茸茸是哪部小说的女主人公 川味干锅五花肉的做法 金镶玉吊坠一般价位是多少啊? 请问金镶玉吊坠含金多少? 同步辐射光源概述