日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

list控件响应鼠标键的单双击

發布時間:2023/11/27 生活经验 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 list控件响应鼠标键的单双击 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前面一片博客磁盤文件目錄羅列和list控件的使用 寫過關于list控件的一點使用方法。這篇博客接著繼續講list控件,當我把某個磁盤下的文件目錄列出來顯示在list控件中,我們肯定是想要對這些目錄進行一些操作,比如新建文件夾、刪除文件等操作。那么就必須讓list控件響應鼠標的操作。
1、那么如何響應鼠標的左鍵單擊事件呢?選中對話框中的list控件,右鍵彈出類向導,添加消息NM_CLICK的事件 響應函數。如下:

 void CFTPCilentDlg::OnNMClickListlocal(NMHDR *pNMHDR, LRESULT *pResult)   //左鍵單擊事件{LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);// TODO: 在此添加控件通知處理程序代碼CString strtempname;NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;if(pNMListView->iItem != -1){
//      strtemp.Format("單擊的是第%d行第%d列",
//          pNMListView->iItem, pNMListView->iSubItem);strtempname=m_listlocal.GetItemText(pNMListView->iItem,0);  //獲取當前選中行的第一列值,即文件名
//      AfxMessageBox(strtemp);drvback=drv;fieldname=strtempname;fieldbyte=m_listlocal.GetItemText(pNMListView->iItem,2);if (drvback.Right(1)!="\\"){drvback+="\\";}drvback+=strtempname;}*pResult = 0;}

我復制的是工程里邊的代碼,有些語句是我自己的實現,所以想要使用的話,自己閱讀。其實代碼也很簡單,if(pNMListView->iItem != -1)判斷的是鼠標點擊的是不是選中了某一項內容,所以所有實現的代碼都需要在這個if語句里邊。

2、同理,需要實現鼠標左鍵雙擊響應,需要添加消息NM_DBLCLK的事件響應。如下:

void CFTPCilentDlg::OnNMDblclkListlocal(NMHDR *pNMHDR, LRESULT *pResult)
{LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);// TODO: 在此添加控件通知處理程序代碼NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;CString strtempname;if(pNMListView->iItem != -1){//      strtemp.Format("單擊的是第%d行第%d列",//          pNMListView->iItem, pNMListView->iSubItem);strtempname=m_listlocal.GetItemText(pNMListView->iItem,0);  //獲取當前選中行的第一列值,即文件名//      AfxMessageBox(strtemp);//AfxMessageBox(m_listlocal.GetItemText(pNMListView->iItem,2).GetBuffer(0));CString tem=drv;CString xx="*";CString yy=m_listlocal.GetItemText(pNMListView->iItem,2).GetBuffer(0);if (strtempname.Compare("..")==0)//是..文件。即上層目錄{//計算上層目錄int len=drv.GetLength();char * backdrv1=drv.GetBuffer(0);char * backdrv2;int i;for (i=len-1;i>=0;){if (*(backdrv1+i)!='\\'){i--;}elsebreak;}backdrv2=new char[i+1];memcpy(backdrv2,backdrv1,i);backdrv2[i]='\0';    //此處注意,一定要加結尾的\0,不然會出錯CString backdrv;backdrv.Format("%s",backdrv2);  //找到上層目錄delete backdrv2;m_listlocal.DeleteAllItems();delete m_imagelist_s;locallistdir(backdrv);((CComboBox*)GetDlgItem(IDC_COMBOlocal))->SetWindowText(backdrv);drv=backdrv;}else if (xx.Compare(yy)!=0)   //字節數不為*,是文件{// MessageBox("gdgd"); //可以調用本機相應程序打開if (drv.Right(1)!="\\"){drv+="\\";}drv+=strtempname;ShellExecute(NULL,_T("open"),drv,NULL,NULL,SW_SHOWNORMAL);drv=tem;}else  //是文件夾{if (drv.Right(1)!="\\"){drv+="\\";}drv+=strtempname;m_listlocal.DeleteAllItems();delete m_imagelist_s;locallistdir(drv);((CComboBox*)GetDlgItem(IDC_COMBOlocal))->SetWindowText(drv);}}*pResult = 0;
}

同1一樣,所有實現的代碼均需在if判斷里面進行。

3、實現鼠標右鍵的單擊事件需要添加消息NM_RCLICK的事件響應函數。此處同上,略。

ok ,到此,基本可以了。我記得當時我自己操作的時候,沒有注意到if判斷語句的作用,所以在list控件的任何位置點擊均能產生響應(不管有沒有選中某項內容),后來才意識到if判斷語句起到了很關鍵的作用。所以有些時候,還是需要自己親自的探索,才能發現自己的不足。

                        拙見,小記!

總結

以上是生活随笔為你收集整理的list控件响应鼠标键的单双击的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。