代碼如下:
.h文件中:定義了兩個變量用來存儲選中的行和列
CUIntArray ITEM; //用於選中行號的集合
CUIntArray SUBITEM; //用於選中列號的集合
.cpp文件中的代碼:
// TODO: 拖動鼠標消息處理函數
if(nFlags == MK_LBUTTON)
{
LVHITTESTINFO hitTestInfo;
hitTestInfo.pt = point;
this->SubItemHitTest(&hitTestInfo);
this->SetItemColor(hitTestInfo.iItem,hitTestInfo.iSubItem,RGB(255,255,255),RGB(50,50,50));
for(int i=0;i < ITEM.GetCount();i++) //避免存儲重復的SubItem。
{
if(hitTestInfo.iItem==ITEM.GetAt(i)&&hitTestInfo.iSubItem==SUBITEM.GetAt(i))
{
return;
}
this->ITEM.Add(hitTestInfo.iItem); //把選中的行號和列號一一對應的存入數組中
this->SUBITEM.Add(hitTestInfo.iSubItem);
}
}
CListCtrl::OnMouseMove(nFlags, point);
下面兩個消息處理函數:“開始拖動”和“單擊”是為了解決重新拖動以及單擊時清除前一次拖動所做的選擇
void CSortListCtrl::OnLvnBegindrag(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMLISTVIEW pNMLV = reinterpret_cast(pNMHDR);
// TODO: 開始拖動鼠標消息處理函數
this->SetItemState(pNMLV->iItem,0,LVIS_SELECTED); //取消當前被選中行的選中狀態
//清空前一次拖動所做的選擇
for(int i=0;i< ITEM.GetCount();i++)
{
this->SetItemColor(ITEM.GetAt(i),SUBITEM.GetAt(i),RGB(0,0,0),RGB(255,255,255));
??}
this->ITEM.RemoveAll();
this->SUBITEM.RemoveAll();
*pResult = 0;
}
void CSortListCtrl::OnNMClick(NMHDR *pNMHDR, LRESULT *pResult)
{
// TODO: 鼠標單擊事件
for(int i=0;iITEM.GetCount();i++)
{
this->SetItemColor(this->ITEM.GetAt(i),this->SUBITEM.GetAt(i),RGB(0,0,0),RGB(255,255,255));
}
this->ITEM.RemoveAll();
this->SUBITEM.RemoveAll();
*pResult = 0;
}
附加說明:我在這個項目中實現的功能是——對所選項右鍵單擊,彈出快捷菜單,進行各種操作,如同時對所有選中的項進行“加法”、“減法”、“乘法”和“除法”等操作 。因為取得了選中的行號和列號,您可以根據自己的需要來實現對所選項的操作。