ListCtrl控制元件雙擊后無法獲取除第1列以外的行號
函式用的是網上的大多數人用的例子:(只能獲取到第一列的行號和列號,點擊第二列時總是顯示行號為-1)
void ParaMeterTool::OnDblclkList1(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);
// TODO: 在此添加控制元件通知處理程式代碼
/*if(pNMItemActivate->iItem != -1)*/
listitemdbcl = list_meterdata.GetSelectionMark();
if(listitemdbcl)
{
CRect rect,dlgRect;
//獲得當前列的寬度以適應如果用戶調整寬度
int width = list_meterdata.GetColumnWidth(pNMItemActivate->iSubItem);
list_meterdata.GetSubItemRect(listitemdbcl,pNMItemActivate->iSubItem,LVIR_BOUNDS,rect);
//保存選擇的串列項索引
//這個因為兩個串列公用一個CEdit控制元件
//所以需要保存串列的索引
//以及子項相對應的行列號索引
listdbclicked = 1;
/*listitemdbcl = pNMItemActivate->iItem;*/
listsubitemdbcl = pNMItemActivate->iSubItem;
}
*pResult = 0;
}
用pNMItemActivate直接獲取不可以,用GetSelectionMark()函式也獲取不到第二列的行號。。
對該listctrl的編程是這樣的,看著沒毛病啊
int line = list_meterdata.GetItemCount();
str_list.Format(_T("%0.2f"),flow_s);
list_meterdata.InsertItem(line,str_list);
for(i = 0;i<sinfo.meternum;i++)
{
str_list.Format(_T("%d"),dt[i]);
list_meterdata.SetItemText(line,i+1,str_list);
}
uj5u.com熱心網友回復:
需要 HitTest 吧?uj5u.com熱心網友回復:
獲取部分修改了:
DWORD dwPos = GetMessagePos();
CPoint point( LOWORD(dwPos), HIWORD(dwPos) );
list_meterdata.ScreenToClient(&point);
//定義結構體
LVHITTESTINFO lvinfo;
lvinfo.pt = point;
//獲取行號資訊
int nItem = list_meterdata.HitTest(&lvinfo);
if(nItem != -1)
{
listitemdbcl = lvinfo.iItem; //當前行號
點擊第二列的時候還是-1
uj5u.com熱心網友回復:
LVS_EDITLABELS 結點的顯示字符可以被編輯,對于報表風格來講可編輯的只為第一列,跟這個有關系沒呢?怎么獲取第二列的行號呢
uj5u.com熱心網友回復:
void CxxxxDlg::OnRdblclkDatabase(NMHDR* pNMHDR, LRESULT* pResult)
{// listctrl
// TODO: Add your control notification handler code here
// find list item
CPoint pt;
GetCursorPos(&pt);
ScreenToClient(&pt);
MapWindowPoints(&m_DataList,&pt,1);
// afxDump<< pt << "\n";
//
LVHITTESTINFO Info;
Info.pt=pt;
Info.flags=LVHT_ONITEM;
int Item=m_DataList.SubItemHitTest(&Info);
afxDump<< Item << ";" << Info.iSubItem << "\n";
*pResult = 0;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/102572.html
標籤:界面
上一篇:記憶體泄漏!!!
下一篇:LSP安裝 轉發sock5
