C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[73933] Re:Re:MFC CListCtrl index 얻기 질문입니다.
kaen [mikaen2891] 5832 읽음    2016-10-25 10:22
빌더(TWx) 님이 쓰신 글 :
: 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이 아닌 값들이 들어갈 겁니다.
:
:
:

답변 :
감사합니다 선배님...

지금 코딩해본결과 note만 쳐도 notepad.exe에 focus되있는것을 확인하였습니다.

그런데 chrome 을 쳐봤는데, 저 같은 경우에 약 10개정도의 프로세스가 있거든요.

이 모든것이 다 선택이 됩니다.

1번에서 제가 원하는 것은 chrome을 입력하고 검색 버튼을 누르면 1번째 크롬이 선택,

그 후 검색버튼을 또 누르면 그 다음에 있는 chrome으로 가고 싶어하는 것인데

이건 어떻게 하면 될까요?

현재 수정한 소스는 다음과 같습니다.

LVFINDINFO finfo = {};
        finfo.flags = LVFI_PARTIAL | LVFI_PARTIAL;
        finfo.psz = SearchItem;

        int index = -1;
        while ((index =m_리스트컨트롤.FindItem(&finfo, index)) != -1)
        {
            CString str = m_리스트컨트롤.GetItemText(index, 0);
            if (str.IsEmpty())
            {
                AfxMessageBox(_T("검색 결과 없습니다."));
            }
            m_리스트컨트롤.SetSelectionMark(index);
            m_리스트컨트롤.SetItemState(index, LVIS_SELECTED | LVIS_FOCUSED, LVIS_SELECTED | LVIS_FOCUSED);
            m_리스트컨트롤.EnsureVisible(index, FALSE); // 검색 후 해당 위치로 이동
            m_리스트컨트롤.SetFocus();// 검색 후 해당 라인 선택

검색 결과가 없을 시 while 조건하에 돌아가는 거라 그런지... if문이 안 읽히는데ㅜㅜ 검색결과가 없으면 alert을 주려하거든요.
어떻게 하면 될까요..ㅜㅜ

+ -

관련 글 리스트
73930 MFC CListCtrl index 얻기 질문입니다. kaen 3646 2016/10/24
73932     Re:MFC CListCtrl index 얻기 질문입니다. 빌더(TWx) 3851 2016/10/24
73933         Re:Re:MFC CListCtrl index 얻기 질문입니다. kaen 5832 2016/10/25
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.