clistctrl 双击如何获得行号,列号 第一列为项目,第二列为次数,要求双击第一列的每一行都产生一个小对话框,输入次数显示在对应的第二列上。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 响应NM_DBLCLK消息,NMITEMACTIVATE结构中的iItem、iSubItem就是行、列号。 int Row=m_list.GetSelectionMark(); //这样可以获取你点击的那一行 LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);pNMLV->iItem //行号pNMLV->iSubItem //列号 在弹出对话框如果你是用编辑框作为输入次数的话,为编辑框添加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);} int Row=m_list.GetSelectionMark(); m_list.SetItemText(Row,1,"你的次数放这"); //BOOL SetItemText(int nItem, int nSubItem, LPCTSTR lpszText); 更正:p->m_list.SetItemText(Row,2,str); 打球去了刚才,不好意思。 cdlglist是什么东西啊,系统提示不正确 cdlglist 就是你CListCtrl控件所在的对话框的类,上面函数体你也可以在点击OK按钮时处理还有就是不要忘记添加cdlglist 类的头文件 加了EN_CHANGE输入一个数字整个程序就关了,怎么回事啊而且这段代码加到按钮的消息响应函数里也不起作用阿 假设你编辑框所在的对话框类是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); } 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); } #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); 这句话不能取得编辑框的内容。 //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;} //在CDD的OnInitDialog函数中为CListctrl控件设置为整栏选择和网格线DWORD ExStyle =m_statuslist.GetExtendedStyle();m_statuslist.SetExtendedStyle(ExStyle|LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES); BasicExcel 内存消耗问题!! 如何获得系统当前的显示语言 客户端采用TCP协议发送数据问题 VC+ADO向Access插入数据,内存泄露问题 函数参数问题 一个视频文件的显示和传输问题,有点难度,寻求高手帮茫,谢谢! 在对话框中动态地创建一个CComboBox,如何获取这个CComboBox的OnSelectChanged消息? directshow 如何对已有视频流内容区域显示设置 如何改变一个CStatic控件上文字的颜色!!!谢谢 请教,调用VIEW类变量 编写windows程序牢牢要记住的结构体 CButtonST按钮显示多行文字
pNMLV->iItem //行号
pNMLV->iSubItem //列号
如:
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);
}
m_list.SetItemText(Row,1,"你的次数放这"); //BOOL SetItemText(int nItem, int nSubItem, LPCTSTR lpszText);
p->m_list.SetItemText(Row,2,str);
而且这段代码加到按钮的消息响应函数里也不起作用阿
那你可以在双击函数中处理看看
#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); }
那你可以在双击函数中处理看看
#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);
}
{
// 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); 这句话不能取得编辑框的内容。
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;
}
m_statuslist.SetExtendedStyle(ExStyle|LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);