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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

MFC 问题集(4)CListCtrl

發(fā)布時(shí)間:2024/8/22 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MFC 问题集(4)CListCtrl 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1、顯示checkbox
????? LVS_EX_CHECKBOXES
????? SetExtendedStyle(GetExtendedStyle()|LVS_EX_CHECKBOXES);
2、允許非第一列顯示圖片。
????? LVS_EX_SUBITEMIMAGES
????? SetExtendedStyle(GetExtendedStyle()|LVS_EX_SUBITEMIMAGES);
3、禁止拖動(dòng)列寬。重載OnNotify,代碼如下。
????? BOOL CExternListCtrl::OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult)
{
// TODO: Add your specialized code here and/or call the base class
HD_NOTIFY *pHDN = (HD_NOTIFY*)lParam;
if((pHDN->hdr.code==HDN_BEGINTRACKW||pHDN->hdr.code==HDN_BEGINTRACKA))// &&((pHDN->iItem==2)||(pHDN->iItem==3))
{
? *pResult=TRUE;
? return TRUE;
}
return CListCtrl::OnNotify(wParam, lParam, pResult);
}

4、解決首次單擊不能觸發(fā)click事件的方法,派生右鍵down事件處理函數(shù),代碼如下:
void CExternListCtrl::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
SetFocus();
CListCtrl::OnLButtonDown(nFlags, point);
}
5、處理圖片單擊事件,判斷區(qū)域,處理單擊。代碼如下。
void CYourDlg::OnNMClickList(NMHDR *pNMHDR, LRESULT *pResult)
{
// TODO: Add your control notification handler code here
??? POINT point;
UINT uFlags;
GetCursorPos(&point);
m_ls.ScreenToClient(&point);
int nItem = m_lst.HitTest(point, &uFlags);
if(nItem >= 0)
{
? CRect rc;
? m_lst.GetSubItemRect(nItem,3,LVIR_BOUNDS,rc);
? if(PtInRect(&rc,point))
? {
?? MessageBox(L"...OnNMClickList");
? }
}
*pResult = 0;
}

6、改變列顯示順序。
int nArQ[] = { 1,2,0,3};
m_lst.GetHeaderCtrl()->SetOrderArray(4,nArQ);

7、讓ListCtrl可以編輯
m_lst.ModifyStyle(0,LVS_EDITLABELS);

8、讓ListCtrl可以選中一行
m_lst.SetExtendedStyle(m_lst.GetExtendedStyle()|LVS_EX_FULLROWSELECT);

9、

函數(shù)名稱:CCommonFuntions::OnCListCtrlUp
描??? 述: 對(duì)CListCtrl記錄的上移操作
輸入?yún)?shù):
??????? *listCtrl?? 對(duì)某個(gè)CListCtrl對(duì)象進(jìn)行上移操作的CListCtrl指針
??????? nColumn???? CListCtrl對(duì)象列數(shù)目(不大于30列)

輸出參數(shù): 無
返??? 回: 無
**************************************************************************/
void CCommonFuntions::OnCListCtrlUp(CListCtrl *listCtrl, int nColumn)
{
??? listCtrl->SetFocus();
??? POSITION pos;
??? pos = listCtrl->GetFirstSelectedItemPosition();

??? // 得到項(xiàng)目索引
??? int index = listCtrl->GetNextSelectedItem(pos);?
??? if (index == -1)
??????? return;

??? // 判斷所選項(xiàng)是否位于行首
??? if (index == 0)
??? {
??????? AfxMessageBox("已經(jīng)位于第一行!");
??????? return;
??? }

??? // 提取所選列表項(xiàng)各列類容

??? CString tempField[30];
??? for (int i=1; i<=nColumn; i++)
??? {
??????? tempField[i] = listCtrl->GetItemText(index, i-1);
??? }

??? // 刪除所選列表項(xiàng)
??? listCtrl->DeleteItem(index);

??? // 在IndexInFieldList-1位置處插入上面所刪列表項(xiàng)的各列類容
??? int tempItem;

??? tempItem = listCtrl->InsertItem(index-1,tempField[1]);
??? for (int j=1; j<nColumn; j++)
??? {
??????? listCtrl->SetItemText(tempItem, j,tempField[j+1]);
??? }

??? index--;

??? // 使得IndexInFieldList-1位置處項(xiàng)目高亮顯示并獲得焦點(diǎn)

??? UINT flag = LVIS_SELECTED|LVIS_FOCUSED;
??? listCtrl->SetItemState(index, flag, flag);

??? 一個(gè) LISTCTRL 有7行 GetItemCount(); 返回 為7
??? 7行,索引對(duì)應(yīng)是0.1.2.3.4.5.6
??? GetItemCount()-2 =5; 對(duì)應(yīng)索引為5的行。

轉(zhuǎn)載于:https://www.cnblogs.com/falla/archive/2010/02/04/1663776.html

總結(jié)

以上是生活随笔為你收集整理的MFC 问题集(4)CListCtrl的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。