急...哪位大俠用過CListCtrl::GetItem().....請教用法..
哪位大俠用過CListCtrl::GetItem().....請教用法..
我常試用CListCtrl::GetItem()來得到當前鼠標所在的行,列,和取出它的文本,---可惜都不成功!
希望各位大俠幫幫小弟!!!!...
问题点数:20、回复次数:11Top
1 楼Jarrylogin(正经事情我不会,歪门邪道样样行)回复于 2005-08-02 19:28:32 得分 5
// Get the image index and state of this item.
ZeroMemory ( &rItem, sizeof(LVITEM) );
rItem.mask = LVIF_IMAGE | LVIF_STATE;//LVIF_STATE,状态
rItem.iItem = nItem;
rItem.stateMask = LVIS_SELECTED;
m_list.GetItem ( &rItem );
获取rItem结构中对应的image和state两项的值
rItem应该是一个LVITEM结构体变量, BOOL GetItem(LVITEM * pItem),返回一个LVITEM结构体数据,是listctrl中的一个item,由rItem来保存
GetItem(LVITEM * pItem)指要取得控件中某个Item的信息,Item和要取得的信息由pItem指定,
typedef struct _LVITEM {
UINT mask; //指定那些项是需要填充的
int iItem; //指定Item索引
int iSubItem; //如果小要取得的是Item的一个子项,在这里指定它的索引
UINT state;
UINT stateMask;
LPTSTR pszText;
int cchTextMax;
int iImage;
LPARAM lParam;
#if (_WIN32_IE >= 0x0300)
int iIndent;
#endif
#if (_WIN32_IE >= 0x560)
int iGroupId;
UINT cColumns; // tile view columns
PUINT puColumns;
#endif
} LVITEM, *LPLVITEM;
这个结构的具体含义MSDN上都有,自己看吧
Top
2 楼zxw2844(赵轩)回复于 2005-08-08 12:49:54 得分 0
怎么没有用啊!
..........................
............................求助!!!Top
3 楼orbit(走了走了)回复于 2005-08-08 13:19:02 得分 0
照抄他的代码肯定没用啊,要理解各个参数的意义,自己选择合适的参数使用,查MSDN是正途Top
4 楼orbit(走了走了)回复于 2005-08-08 13:22:09 得分 0
CListCtrl::GetHotItem
就在msdn上Top
5 楼kugou123(酷狗)(彪悍的人生,不需要解释 www.xiaozhou.net)回复于 2005-08-08 13:22:31 得分 5
int CurSel=m_ListCtrl.GetNextItem(-1,LVNI_ALL | LVNI_SELECTED); //得到选中行的索引值
if(CurSel!=-1) //返回1,表示没有行被选中
{
CString strName=m_ListCtrl.GetItemText(CurSel,0); //取0列的值
}
else
AfxMessageBox("你没有选中");Top
6 楼leonone()回复于 2005-08-08 13:51:16 得分 5
你可以响应鼠标消息,如NM_DBLCLK,自己派生一个CListCtrl,响应该消息
void CMyListCtrl::OnNMDblclk(NMHDR *pNMHDR, LRESULT *pResult)
{
pResult = 0;
LPNM_LISTVIEW pNMListView = (LPNM_LISTVIEW)pNMHDR;
int index=pNMListView->iItem;
//得到当前发送消息的item索引
//你可以在MSDN中查看一下NMLISTVIEW结构体,里面有很多信息的
//相信这样应该OKle
}
Top
7 楼zxw2844(赵轩)回复于 2005-08-08 20:40:48 得分 0
....得到當前鼠標所在的行,列,和取出它的文本-----我用別的方法已經實現了,只是想常試用CListCtrl::GetItem()來實現!!!!
MSDN中:BOOL GetItem(LVITEM* pItem ) const;
當*.mask = LVIF_COLUMNS;時, 出錯了,說LVIF_COLUMNS沒有定義...
......................?????
另一個問題!!!
如何實現用鼠標選擇一格紀錄,而且不是一整條紀錄..并且可以通過拖動鼠標同時選擇多條紀錄(多個單元格)--------只需在同一列能夠實現就可以了(同一列下,用鼠標拖動選擇多個單元格紀錄...)!!
-----------希望各位達人可以幫幫我,---Top
8 楼kenskens(☆☆☆☆☆☆)回复于 2005-08-08 21:03:58 得分 0
借楼主宝地一用:
void CMyListCtrl::OnItemChanged(NMHDR *pNMHDR, LRESULT *pResult)
{
pResult = 0;
LPNM_LISTVIEW pNMListView = (LPNM_LISTVIEW)pNMHDR;
int index=pNMListView->iItem;
if( (index != -1) && (pNMListView->uNewState == 3) )
{
// 为什么只有当uNewState==3时才是当前选中项的索引呢?而且此前函数还会被调用两次
// 一次uOldState为2,一次为1,这两次的iItem值都是以前选项的索引,我查文档得知2
// 是selected, 1是focus, 但是并没有值为3的解释
}
}
故想请教一下3是代表什么呢,还有这个oldState和newState,当选项发生改变时,为何会有一系列的变化,都各自代表什么意思呢??Top
9 楼zxw2844(赵轩)回复于 2005-08-09 18:21:43 得分 0
upTop
10 楼wxshzf(oldriver)回复于 2005-08-09 18:27:58 得分 0
LPNM_LISTVIEW pNMListView = (LPNM_LISTVIEW)pNMHDR;
Top
11 楼lixiaosan(小三)回复于 2005-08-09 18:31:56 得分 5
void CTest6Dlg::OnClickList1(NMHDR* pNMHDR, LRESULT* pResult)
{
DWORD dwPos = GetMessagePos();
CPoint point( LOWORD(dwPos), HIWORD(dwPos) );
m_list.ScreenToClient(&point);
LVHITTESTINFO lvinfo;
lvinfo.pt = point;
lvinfo.flags = LVHT_ABOVE;
int nItem = m_list.SubItemHitTest(&lvinfo);
if(nItem != -1)
{
CString strtemp;
strtemp.Format("单击的是第%d行第%d列", lvinfo.iItem, lvinfo.iSubItem);
AfxMessageBox(strtemp);
}
*pResult = 0;
}
Top




