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