clistctrl 双击怎么样获得行号,列号



http://www.qqgb.com/program/vc/vcjc/program_234088.html
 
<script language="javascript" src="http://www.qqgb.com/tech/link1QQgb.Com.js"></script><script type="text/javascript"> </script> <script style="display: none;" type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
第一列为项目,第二列为次数,要求双击第一列的每一行都产生一个小对话框,输入次数显示在对应的第二列上。
这个问题第1个回答:
响应NM_DBLCLK消息,NMITEMACTIVATE结构中的iItem、iSubItem就是行、列号。
这个问题第2个回答:
添加NM_DBLCLK消息响应
这个问题第3个回答:
int Row=m_list.GetSelectionMark(); //这样可以获取你点击的那一行
这个问题第4个回答:
已经添加了双击函数,双击后窗口也弹出了,求后面代码,在线等
这个问题第5个回答:
LPNMLISTVIEW pNMLV = reinterpret_cast <LPNMLISTVIEW>(pNMHDR);
pNMLV->iItem //行号
pNMLV->iSubItem //列号


这个问题第6个回答:
在弹出对话框如果你是用编辑框作为输入次数的话,为编辑框添加EN_CHANGE消息响应
如:
void CAnalogy::OnChangeEdit5()
{
CString str;
GetDlgItem(IDC_EDIT1)->SetWindowText(str);
CDlgList *p=(CDlgList *)GetParent(); //获得Listctrl控件所在对话框的指针
int Row=p->m_list.GetSelectionMark(); //这样可以获取你点击的那一行
p->m_list.SetItemText(Row,2);
}
这个问题第7个回答:
int Row=m_list.GetSelectionMark();
m_list.SetItemText(Row,1,"你的次数放这"); //BOOL SetItemText(int nItem, int nSubItem, LPCTSTR lpszText);
这个问题第8个回答:
更正:
引用 6 楼 zqh886 的回复:
在弹出对话框如果你是用编辑框作为输入次数的话,为编辑框添加EN_CHANGE消息响应
如:
void CAnalogy::OnChangeEdit5()
{
CString str;
GetDlgItem(IDC_EDIT1)->SetWindowText(str);
CDlgList *p=(CDlgList *)GetParent(); //获得Listctrl控件所在对话框的指针
int Row=p->m_list.GetSelectionMark(); //这样可以获取你点击的那一行
p->m_list.SetItemText(Row,2); //漏写了str
}

p->m_list.SetItemText(Row,2,str);
这个问题第9个回答:
打球去了刚才,不好意思。 cdlglist是什么东西啊,系统提示不正确
这个问题第10个回答:
cdlglist 就是你CListCtrl控件所在的对话框的类,

上面函数体你也可以在点击OK按钮时处理

还有就是不要忘记添加cdlglist 类的头文件
这个问题第11个回答:
加了EN_CHANGE输入一个数字整个程序就关了,怎么回事啊
而且这段代码加到按钮的消息响应函数里也不起作用阿
这个问题第12个回答:
我刚才也是照你说的弄得,就是上面这种状况
这个问题第13个回答:
假设你编辑框所在的对话框类是CDlgA
那你可以在双击函数中处理看看
#include "DlgA.h"
CDlgA dlg;
if(dlg.DoModal()==IDOK)
{
CString str;
GetDlgItem(IDC_EDIT1)->SetWindowText(str);
CDlgList *p=(CDlgList *)GetParent(); //获得Listctrl控件所在对话框的指针
int Row=p->m_list.GetSelectionMark(); //这样可以获取你点击的那一行
p->m_list.SetItemText(Row,2,str);

}

这个问题第14个回答:
sorry

假设你编辑框所在的对话框类是CDlgA
那你可以在双击函数中处理看看
#include "DlgA.h"
CDlgA dlg;
if(dlg.DoModal()==IDOK)
{
CString str;
GetDlgItem(IDC_EDIT1)->SetWindowText(str);
int Row=m_list.GetSelectionMark(); //这样可以获取你点击的那一行
m_list.SetItemText(Row,2,str);
}
这个问题第15个回答:
#include "CDD.h" //CDD 就是你CListCtrl控件所在的对话框的类,

以下是在编辑框所在对话框的“确定”按钮中处理函数体

void CDlgA::OnOK() //CDlgA为编辑框所在对话框的类
{
// TODO: Add extra validation here

    CString str;
  CDD *p=(CDD *)GetParent();
    GetDlgItem(IDC_EDIT1)->GetWindowText(str);
    int Row=p->m_statuslist.GetSelectionMark(); //这样可以获取你点击的那一行
    p->m_statuslist.SetItemText(Row,2,str);


CDialog::OnOK();
}

我刚给你这样做了,测试通过

我试了一下上面我给的代码,GetDlgItem(IDC_EDIT1)->SetWindowText(str); 这句话不能取得编辑框的内容。

这个问题第16个回答:
//1、list ctrl初始化时要设置全行选中风格:
m_wndListCtrl.SetExtendedStyle(LVS_EX_FULLROWSELECT);

//2、处理list ctrl的NM_DBLCLK消息:
void CMYDlg::OnDblclkList1(NMHDR* pNMHDR, LRESULT* pResult)
{
    // TODO: Add your control notification handler code here
    LPNMLISTVIEW pNMListView = (NM_LISTVIEW *)pNMHDR;

    CString strText;
    //是否点击了有效的项目。
    if (pNMListView->iItem == -1)
    {
        AfxMessageBox("你没有点击任何项目");
    }
    else
    {
        //获取所点击的行和列的例子。
        strText.Format("你点击了第%d行", pNMListView->iItem);
        AfxMessageBox(strText);

        strText.Format("你点击了第%d列", pNMListView->iSubItem);
        AfxMessageBox(strText);

        //在这里显示对话框。可以使用GetDlgItemInt获取在文本框控件中输入的次数。
        //然后使用CString strNumber; strNumber.Format将次数转换为字符串。
        //最后使用m_wndListCtrl.SetItemText(pNMListView->iItem, 1, strNumber);设置第1列(次数列)的值。
    }

    *pResult = 0;
}

这个问题第17个回答:
//在CDD的OnInitDialog函数中为CListctrl控件

[1] [2] 下一页  





--------------------------------------

请问如何获得CListCtrl控件的当前选择项(单选和多选)?谢谢。

楼主qidai628(期待) 2005-11-28 16:59:30 在 VC/MFC / 界面 提问

请问如何获得CListCtrl控件的当前选择项(单选和多选)?谢谢。 问题点数:20、回复次数:6Top

<script language="javascript" src="http://www.80diy.com/js/banner_comm.js"></script><script style="display: none;" type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>

1 楼aceouter(outer)回复于 2005-11-28 17:15:37 得分 5

CListCtrl*   pListCtrl   =   (CListCtrl*)   GetDlgItem(IDC_YOURLISTCONTROL);  
  ASSERT(pListCtrl   !=   NULL);  
   
  POSITION   pos   =   pList->GetFirstSelectedItemPosition();  
  if   (pos   ==   NULL)  
        TRACE0("No   items   were   selected!/n");  
  else  
  {  
        while   (pos)  
        {  
              int   nItem   =   pList->GetNextSelectedItem(pos);  
              TRACE1("Item   %d   was   selected!/n",   nItem);  
              //   you   could   do   your   own   processing   on   nItem   here  
        }  
  }  
  Top

2 楼lixiaosan(小三)回复于 2005-11-28 17:19:54 得分 5

//   The   pointer   to   my   list   view   control.  
  extern   CListCtrl*   pmyListCtrl;  
   
  //   Set   the   selection   mark   to   the   first   item   only   if   no   other   item   is    
  //   selected.  
  if   (pmyListCtrl->GetSelectionMark()   ==   -1)  
              pmyListCtrl->SetSelectionMark(0);  
   
   
   
  CListCtrl*   pListCtrl   =   (CListCtrl*)   GetDlgItem(IDC_YOURLISTCONTROL);  
  ASSERT(pListCtrl   !=   NULL);  
   
  POSITION   pos   =   pList->GetFirstSelectedItemPosition();  
  if   (pos   ==   NULL)  
        TRACE0("No   items   were   selected!/n");  
  else  
  {  
        while   (pos)  
        {  
              int   nItem   =   pList->GetNextSelectedItem(pos);  
              TRACE1("Item   %d   was   selected!/n",   nItem);  
              //   you   could   do   your   own   processing   on   nItem   here  
        }  
  }Top

3 楼happyparrot(快乐鹦鹉)回复于 2005-11-28 17:30:37 得分 10

好的方法:  
  int   nIdx   =   m_ListCtrl.GetNextItem(-1,LVNI_SELECTED);  
  如果有多选,那么判断nIdx是否为-1,不是则继续查找,继续查找用:  
  nIdx   =   m_ListCtrl.GetNextItem(nIdx,LVNI_SELECTED);Top

4 楼JonneyR(lxc)回复于 2005-11-28 17:31:29 得分 0

不错,学习了Top

5 楼qidai628(期待)回复于 2005-11-28 17:34:42 得分 0

在只能选择一项时,怎样得到当前选择项的index值?Top

6 楼happyparrot(快乐鹦鹉)回复于 2005-11-28 17:35:44 得分 0

用int   nIdx   =   m_ListCtrl.GetNextItem(-1,LVNI_SELECTED);  
  就可以了。nIdx就是你要的indexTop



http://www.80diy.com/home/20051128/16/4423738.html




  • 0
    点赞
  • 1
    评论
  • 1
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值