중화사전망 - 자전 검색 - VC++ 목록 컨트롤의 구체적인 사용 예.
VC++ 목록 컨트롤의 구체적인 사용 예.
1.ListCtrl 스타일
LVS 아이콘: 각 항목에 대해 큰 아이콘을 표시합니다.
LVS_SMALLICON: 각 항목에 대해 작은 아이콘을 표시합니다.
LVS 목록: 프로젝트 목록을 작은 아이콘으로 표시합니다.
LVS _ 보고서: 품목 상세내역을 표시합니다.
시각적 이해: windows 탐색기의 뷰 탭 아래에 있는 큰 아이콘, 작은 아이콘, 리스트, 상세 정보.
--
2. listctrl 스타일 및 확장 스타일을 설정합니다.
긴 l 스타일
L style = getwindowlong (m _ list.m _ hwnd, gwl _ style); //현재 창 스타일 가져오기
LStyle & amp= ~ LVS _ 유형 마스크; //화면표시 모드 비트 지우기
LStyle |= LVS 보고서; //스타일 설정
SetWindowLong(m _ list. m _ hWnd, GWL_STYLE, l 스타일); //스타일 설정
DWORD dwStyle = m_list 입니다. Getextendedstyle ();
Dwstyle | = LVS _ ex _ fullrowselect; //하나를 선택하여 전체 행을 강조 표시합니다 (보고서 스타일의 listctrl 만 해당)
Dwstyle | = LVS _ ex _ gridlines; //그리드 라인 (보고서 스타일의 listctrl 만 해당)
Dw style | = LVS _ EX _ 확인란; //항목 앞에 확인란 컨트롤을 생성합니다.
M_list 입니다. Setextendedstyle (dwstyle); //확장 스타일 설정
--
데이터를 삽입합니다
M_list 입니다. Insert column(0, "ID", LVCFMT_LEFT, 40); //열 삽입
M_list 입니다. Insert column( 1, "NAME", LVCFMT_LEFT, 50);
Int nRow = m_list 입니다. Insert item(0, "11"); //행 삽입
M_list 입니다. SetItemText(nRow, 1, "Jacky"); //데이터 설정
--
4. 프로젝트를 선택된 상태로 둡니다.
항상 선택 사항을 스타일로 표시 를 선택하거나 위의 점 2 에서 항상 LVS _ 표시 를 설정합니다.
--
5. 라인을 선택 및 선택 취소합니다.
Intnindex = 0;
//선택됨
M_list 입니다. SetItemState(nIndex, LVIS 선택 |LVIS 초점, LVIS 선택 |LVIS 초점);
//선택 해제
M_list 입니다. SetItemState(nIndex, 0, LVIS _ 선택 | LVIS _ 초점);
--
6. listctrl 의 모든 라인에 대한 체크박스 상태를 가져옵니다.
M_list 입니다. SetExtendedStyle(LVS 확인란);
CString 문자열;
For(int I = 0;; 나 & ltm_list. Getitemcount (); 나)
{
If(m _ list) 입니다. GetItemState(I, LVIS _ 선택) = = LVIS _ 선택 || m_list. Get check(I))
{
해협. 형식 (_ t ("%d 행의 확인란이 선택됨"), I);
Afxmessagebox (str);
}
}
CString 문자열;
Strins = "delete from tmpstatbyground";
M_pRs. Createinstance (_ _ uuidof (recordset));
M _ pRs-& gt;; CursorLocation = adUseClient
M _ pRs-& gt;; 오픈 open((LPCTSTR)strIns, vDispatch, adOpenKeyset,
AdLockOptimistic, ADC MD unknown);
--
7. listctrl 에서 선택한 모든 라인의 일련번호를 가져옵니다.
방법 1:
CString 문자열;
For(int I = 0;; 나 & ltm_list. Getitemcount (); 나)
{
If(m _ list) 입니다. GetItemState(I, LVIS _ 선택) = = LVIS _ 선택)
{
해협. 형식 (_ t ("행 %d 이 (가) 선택됨", I);
Afxmessagebox (str);
}
}
방법 2:
위치 pos = m_list 입니다. Getfirstselecteditemposition ();
If(pos = = NULL)
TRACE0 ("선택된 항목이 없습니다! \ n ");
기타
{
때 (위치)
{
Int nItem = m_list 입니다. GetNextSelectedItem(pos););
추적1("선택된 항목 %d! \n ",nitem);
//당신은 nItem 에서 스스로 처리할 수 있습니다
}
}
--
8. 프로젝트 정보 얻기
Tchar szbuf [1024];
LVITEM lvi
Lvi.iItem = nItemIndex
Lvi. Isubitem = 0;;
Lvi.mask = LVIF _ TEXT
Lvi.pszText = szBuf
Lvi.cchtextmax =1024;
M_list 입니다. GetItem(& amp;; Lvi);
--
9. listctrl 의 모든 열에 대한 제목 문자열 내용을 가져옵니다.
LVCOLUMN lvcol
Char string [256];
Int nColNum
Cstringstr column name [4]; //4 개의 열이 있는 경우
NColNum = 0;;
Lvcol.mask = lvcf _ text;
Lvcol.pszText = str
Lvcol.cchTextMax = 256
While(m _ list. GetColumn(nColNum & amp;; Lvcol) 을 참조하십시오
{
Strcolumnname [ncolnum] = lvcol.psztext;
NColNum
}
--
10. listctrl 중 하나를 보이게 합니다. 즉 스크롤 막대를 스크롤합니다
M_list 입니다. Ensure visible(I, false) :
--
1 1. listctrl 열 번호를 가져옵니다.
Int nHeadNum = m_list 입니다. Getheaderctrl ()-> Getitemcount ();
--
12. 모든 열 삭제
방법 1:
While(m _ list. 열 (0) 삭제
첫 번째 열을 삭제하면 다음 열이 순서대로 위로 이동하기 때문입니다.
방법 2:
Intncolumns = 4;
For (int I = ncolumns-1; 나 & gt=0; 나-)
M_list 입니다. 열 삭제 (I);
--
13. 클릭한 listctrl 의 열 번호를 가져옵니다.
Listctrl 컨트롤의 NM_CLICK 메시지에 해당하는 함수를 추가합니다.
Voidctest6dlg:: onclicklist1(nmhdr * pnmhdr, LRESULT* pResult)
{
//방법 1:
/*
Dword dwpos = getmessagepos ();
CPoint (낮은 단어 (dwPos), 높은 단어 (dwpos));
M_list 입니다. Screento client(& amp;; 점);
LVHITTESTINFO lvinfo
Lvinfo.pt = point
Lvinfo.flags = LVHT _ ABOVE
Int nItem = m_list 입니다. 하위 테스트 (& amplvinfo);
If(nItem)! =-1)
{
CString strtemp
Strtemp 입니다. 형식 ("%d 행 %d 열 클릭", lvinfo.iItem, lvinfo.isubitem);
Afxmessagebox (strtemp);
}
*/
//방법 2:
/*
Nm _ listview * pnm listview = (nm _ listview *) pnmhdr;
If (if(pNMListView-& gt;; 프로젝트! =-1)
{
CString strtemp
Strtemp 입니다. 형식 ("%d 행 %d 열 클릭",
PNMListView-& gt;; IItem, pNMListView-& gt;; Isubitem);
Afxmessagebox (strtemp);
}
*/
* pResult = 0;;
}
--
14. listctrl 의 확인란을 클릭할지 여부를 결정합니다.
Listctrl 컨트롤의 NM_CLICK 메시지에 해당하는 함수를 추가합니다.
Voidctest6dlg:: onclicklist1(nmhdr * pnmhdr, LRESULT* pResult)
{
Dword dwpos = getmessagepos ();
CPoint (낮은 단어 (dwPos), 높은 단어 (dwpos));
M_list 입니다. Screento client(& amp;; 점);
LVHITTESTINFO lvinfo
Lvinfo.pt = point
Lvinfo.flags = LVHT _ ABOVE
UINT nFlag
Int nItem = m_list 입니다. 타격 (포인트& nflag);
//확인란을 클릭할지 여부를 결정합니다.
If(nFlag = = LVHT _ ONITEMSTATEICON)
{
AfxMessageBox ("listctrl 을 가리키는 확인란");
}
* pResult = 0;;
}
--
15. listctrl 의 항목 팝업 메뉴를 마우스 오른쪽 단추로 클릭합니다.
Listctrl 컨트롤의 NM_RCLICK 메시지에 해당하는 함수를 추가합니다.
Voidctest6dlg:: onclicklist1(nmhdr * pnmhdr, LRESULT* pResult)
{
Nm _ listview * pnm listview = (nm _ listview *) pnmhdr;
If (if(pNMListView-& gt;; 프로젝트! =-1)
{
Dword dwpos = getmessagepos ();
CPoint (낮은 단어 (dwPos), 높은 단어 (dwpos));
CMenu 메뉴;
검증 (메뉴). 로드 메뉴 (IDR _ m enu1);
CMenu* popup = 메뉴. Getsubmenu (0);
어설 션 (꺼내기! = null);
팝업 메뉴-> Trackpoppupmenu (TPM _ leftalign | TPM _ rightbutton, point.x, point.y, this);
}
* pResult = 0;;
}
--
16. 키보드 및 마우스로 항목을 전환하는 경우를 포함하여 항목 항목이 초점을 전환하면 일부 항목이 상태 순서를 변경합니다.
LVN_ITEMCHANGED 메시지의 해당 함수를 listctrl 컨트롤에 추가합니다.
Voidctest6dlg:: onitemchangedlist1(nmhdr * pnmhdr, LRESULT* pResult)
{
Nm _ listview * pnm listview = (nm _ listview *) pnmhdr;
// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다
CString sTemp
If ((if((pNMListView-& gt;; UOldState & ampLVIS 초점) = LVIS 초점 & amp& amp
(pNMListView-& gt;; 유엔 뉴스 상태 및 보도. LVIS 초점) = 0)
{
단계. 형식 ('%d 개의 누락된 초점', pNMListView-& gt;; I item);
}
Elseif ((pnm listview-> UOldState & ampLVIS 초점) = 0 & amp& amp
(pNMListView-& gt;; 유엔 뉴스 상태 및 보도. LVIS 에 초점 맞추기) = lvis 에 초점 맞추기)
{
단계. 형식 ('%d 포커스', pNMListView-& gt;; I item);
}
If ((if((pNMListView-& gt;; UOldState & ampLVIS 선택) = LVIS 선택 & amp& amp
(pNMListView-& gt;; 유엔 뉴스 상태 및 보도. LVIS _ 선택됨) = 0)
{
단계. 형식 ('%d 개 누락 선택', pNMListView-& gt;; I item);
}
Elseif ((pnm listview-> UOldState & ampLVIS 선택) = 0 & amp& amp
(pNMListView-& gt;; 유엔 뉴스 상태 및 보도. LVIS 선택됨) = LVIS 선택됨)
{
단계. 형식 ("%d 개 선택"), pNMListView-& gt;; I item);
}
* pResult = 0;;
}
--
17.listctrl 의 하위 항목 추가 아이콘
참고: SetItem 을 사용하여 추가 항목을 설정하기 전에 InsertItem () 을 사용하여 한 행의 첫 번째 열을 삽입합니다.
M_list 입니다. Setextendedstyle (LVS _ ex _ subiteimages);
M_userlist 입니다. SetItem (..);
--
18. CListCtrl 에 파일을 표시하고 파일 형식에 따라 아이콘을 표시합니다.
인터넷에서 찾은 코드를 직접 수정해 보고 공유해 보세요.
1: 목록의 이미지 목록을 시스템 이미지 목록으로 설정합니다.
Bool set system imagelist (clist ctrl & 목록)
{
HIMAGELIST himlSmall
HIMAGELIST himlLarge
SHFILEINFO SFI
Char csysdir [max _ path];
CString strBuf
Memset(csy sdir, 0, max _ path);
Getwindowsdirect(cSysDir, max _ path);
StrBuf = cSysDir
// SHGetFileInfo:
//uFlags 에 SHGFI_SYSICONINDEX 가 포함된 경우 반환 값은 다음과 같습니다
//큰 아이콘 이미지가 포함된 이미지 리스트입니다.
//SHGFI_SYSICONINDEX 에 SHGFI_SMALLICON 이 포함되어 있으면 값을 반환합니다
//는 작은 아이콘 이미지가 포함된 이미지 리스트의 핸들입니다.
//
Himlsmall = (himagelist) shgetfileinfo ((lpcstr) c sysdir,
0,
& ampsfi,
Sizeof(SHFILEINFO),
Sh gfi _ sys icon index | sh gfi _ smallicon);
Himallarge = (himagelist) shgetfileinfo ((lpcstr) c sysdir,
0,
& ampsfi,
Sizeof(SHFILEINFO),
Sh gfi _ sys icon index | sh gfi _ largeicon);
If(himlSmall & amp;; & amphimlLarge)
{
* 메시지 보내기 (list.m_hWnd, LVM_SETIMAGELIST,
(WPARAM)LVSIL _ SMALL, (lparam) himlsmall);
* 메시지 보내기 (list.m_hWnd, LVM_SETIMAGELIST,
(WPARAM)LVSIL _ NORMAL, (lparam) him llarge);
}
TRUE 를 반환합니다
}
2 단계: 지정된 파일을 리스트에 추가하고, 파일의 아이콘 색인을 가져오고, 리스트에 아이콘을 추가합니다.
Int geticondex(LPCTSTR lpszPath, BOOL bIsDir, bool b selected); //전달 명령문
Void AddFiles(clist ctrl & amp;; List, LPCTSTR lpszFileName, BOOL bAddToDocument)
{
Intnicon = geticondex (lpsz 파일 이름, FALSE, true);
CString strSize
CFileFind 파일 조회;
//파일 크기 가져오기
If (파일 조회. Findfile (lpsz 파일 이름))
{
파일 조회. Findnextfile ();
StrSize. 형식 ('%d', 파일 조회. GetLength()););
}
기타
Strsize = "0";
//경로 및 파일 이름 분할
Cstring str filename = lpsz filename;
CString strPath
Int nPos = strFileName 입니다. Reversefind ('\ \');
만약 (nPos! =-1)
{
StrPath = strFileName 입니다. 왼쪽 (NPO);
StrFileName = strFileName 입니다. Mid (NPO1);
}
//목록 삽입
Int nItem = list 입니다. Getitemcount ();
//리스트. Insert item(nItem, strFileName, nicon);
//리스트. SetItemText(nItem, 1, strsize);
//
//실제 필요에 따라 여기서 코드를 수정할 수 있습니다.
//
}
--
19.listctrl 콘텐츠는 깜박임을 피하기 위해 대량의 데이터로 업데이트해야 합니다.
M_list 입니다. Set redraw (false);
//컨텐츠 업데이트
M_list 입니다. Set redraw (true);
M_list 입니다. Invalidate ();
M_list 입니다. Updatewindow ();
20. ListCtrl 을 지워 다시 초기화합니다.
//모든 행 삭제
M_ctrllist 입니다. Deleteallitems ();
//모든 열 삭제
Int iColCount = m_ctrllist 입니다. Getheaderctrl ()-> Getitemcount ();
//방법 1
//원리: 첫 번째 열을 삭제하면 추가 열이 앞으로 이동합니다.
While(m _ ctrl list. Delete column(0)););
//방법 2
For(int I = 0;; 나 & ltiColCount 나)
{
M_ctrllist 입니다. 열 삭제 (0);
}
//방법 3
For (int I = icolcount-1; 나>= 0; 나-)
{
M_ctrllist 입니다. 열 삭제 (I);
}