天天看點

clistctrl 輕按兩下怎麼樣獲得行号,列号請問如何獲得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