중화사전망 - 자전 검색 - 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);

}