kaen 님이 쓰신 글 :
: 안녕하세요..
:
: 현재 4년제 재학중인 대학생입니다...
:
: 선배님들의 도움을 얻고자 합니다!
:
: MFC CListCtrl에서 저는 현재 프로세스의 목록을 받아오고 있는데요,
:
: 1. 검색 버튼을 클릭시 중복된 값
: 예를들어 chrome.exe 가 2개 이상인데, 검색 버튼을 클릭시 1번째 chrome.exe 후에 다음 chrome.exe로 넘어가는 법이 궁금합니다.
: 그냥 chrome.exe 검색하는 소스는 다음과 같습니다.
:
: void CTaskManagerDlg::OnBnClickedButtonSearch()
: {
: //검색키를 누르게 되면 값을 비교하여 찾아냄
: // TODO: Add your control notification handler code here
:
: LVFINDINFO find_item;
: find_item.flags = LVFI_STRING;
: find_item.psz = SearchItem;
:
: int index = m_ProcessLIst.FindItem(&find_item);
: if (index != -1)
: {
: m_ProcessLIst.SetSelectionMark(index);
: m_ProcessLIst.SetItemState(index, LVIS_SELECTED | LVIS_FOCUSED, LVIS_SELECTED | LVIS_FOCUSED);
: m_ProcessLIst.EnsureVisible(index, FALSE); // 검색 후 해당 위치로 이동
: m_ProcessLIst.SetFocus();// 검색 후 해당 라인 선택
:
: }
: else
: {
: AfxMessageBox(_T("검색 결과 없습니다."));
: }
: }
:
: 여기에서 index로 값을 비교하여 찾고 있는데 다음걸로 넘어가는게 안됩니다..ㅜㅜ
:
: 2. 풀네임이 아닌 이름만 쳐도 검색되게 하는 것
: 예를 들어 메모장인 Notepad.exe 를 검색하려면 저는 Notepad.exe를 쳐야 됩니다.
: 그런데 여기에 Note만 쳐도 검색버튼을 누르면 나오게끔 하는법이 없을까요...?
:
: 해당 문제를 소스코딩 까지 아니더라도 참고할 사이트라도 알려주시면 감사하겠습니다.ㅜㅜ
답변:
1.번과 2.번 조건을 모두 만족하도록 프로그래밍 하는 것은 간단합니다.
MFC를 이용해서 프로그래밍 한다면...
LVFINDINFO finfo = {}; // finfo 구조체 값들 0으로 셋
finfo.flags = LVFI_PARTIAL;
finfo.psz = L"Note";
int index = -1;
while ((index = m_listCtrl.FindItem(&finfo, index)) != -1)
{
CString str = m_listCtrl.GetItemText(index, 0);
}
파셜조건이 만족할 때 까지, index 값은 -1이 아닌 값들이 들어갈 겁니다.
|