본문 바로가기

공부/컴퓨터

[MFC] 리스트 컨트롤에서 OnItemchanged 가 호출 될때..

반응형
OnItemchanged 가 호출 되는 경우가 있다.

바로 리스트 컨트롤 같은것에서 아이템을 고를때 선택  되는데.

한번 다른 아이템을 선택할때마다 총 3번이 호출 되게 된다.

이전에 있던 아이템이 두번 ( 선택 되는것, 포커스 사라지는것 ),
그리고 현재 선택된 아이템이 한번, 이렇게 총 3번 호출 되게 한다.

그렇다면 이번에 선택된것만 , 딱 한번만 호출 하고 싶을때에는 다음과 같이 한다.


==============================================================================

void CArticleView::OnItemchanged(NMHDR* pNMHDR, LRESULT* pResult)
{
        NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
        // TODO: Add your control notification handler code here
        // 이곳에다가 CContentView.ExNavigator(CString strHTML)을 호출하게 하면 된다.
        int item = pNMListView->iItem; // idx of item that changed
        bool wasSelected = (pNMListView->uOldState & LVIS_SELECTED) != 0;
        bool  isSelected = (pNMListView->uNewState & LVIS_SELECTED) != 0;

        // 아이템체인지드는 이전에 선택 된것들이 포커스가 없어 지면서도
        // 실행 되므로 실제 클릭 된것만 보여주기 위해 다른것들은 그냥 리턴 시킴.
        if ( !(!wasSelected && isSelected) ) return;

        // SomeCode

}



http://www.experts-exchange.com/Programming/Programming_Languages/MFC/Q_20248604.html
반응형