달력

12

« 2024/12 »

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

리스트 컨트롤에서 Multi Selection후 삭제를 할라보니 몇개가 남는다...

뭥미;;

찾아보니 뒤에서부터 지워라, 인덱스를 만들어 지워라 등등 많았는데...

가장 깔끔하게 해결하는 방법을 Liverpool님께서 블로그에 올려두신 것을 보았으니..

오호 통제라..


POSITION pos = m_LstSelectList.GetFirstSelectedItemPosition();
if(pos == NULL)return;


//처음부터 선택된 값을 해제 한다.
while(pos){
     int index = m_LstSelectList.GetNextSelectedItem(pos);
     m_LstSelectList.DeleteItem(index);
     pos = m_LstSelectList.GetFirstSelectedItemPosition();
}

위치를 초기화 시켜주는 것으로 한방에 해결~!  멋진걸.

출처 :  http://choiks.tistory.com/89

:
Posted by Lunaness

리스트컨트롤을 사용하는데 자동으로 선택해와야 하는 경우가 생겨 찾아보니
데브피아에 저런 내용이 검색되었다

저도 같은 내용을 검색 하다가 다음과 같은 내용을 찾았습니다. 즐프.. ^^;

 ListCtrl::SetSelectionMark(int i)  : i번째 item을 선택하는 것은 맞습니다.

단지 포커스까지 주지 않기때문에 표시(파란줄)가 되지 않을 뿐이지 내부적으로 현재 선택된 아이템은 i번째 아이템입니다.

m_list1.SetItemState(i, LVIS_SELECTED, LVIS_SELECTED)  : 이것만 사용하시면 문제가 발생할 수 있습니다.

내부적으로 자동 선택된 아이템의 인덱스와 표시(파란줄)된 아이템의 인덱스가 달라질 수 있거든요..
표시된 아이템을 삭제하려고 삭제 버튼을 눌렀는데 딴 아이템이 삭제되는 일이  생길 수 있겠죠..

그래~서 이렇게 사용하시면 깔끔하실 듯 싶습니다.^^호호

m_cListCtrl.SetSelectionMark(i);
m_cListCtrl.SetItemState(i, LVIS_SELECTED|LVIS_FOCUSED, LVIS_SELECTED|LVIS_FOCUSED);
m_cListCtrl.SetFocus();


깔끔하게 해결되는구만 -ㅂ-;
:
Posted by Lunaness
리스트 뷰를 추가되는 데이터 때문에 항상 아래를 보이게 해야 하는 상황이 나왔다

데브피아를 찾아보니

EnsureVisible() 쓰라능~!

라고 나와있길레.......

pListView->SetScrollPos(SB_VERT, pListView->GetListCtrl().GetItemCount());
pListView->GetListCtrl().EnsureVisible(pListView->GetListCtrl().GetItemCount() - 1, true);

이렇게 써봤더니..  엄청난 깜박임이 발생하였다 |||orz


그래서 다시 찾은 방법이
pListView->SendMessage(WM_VSCROLL,SB_BOTTOM,NULL);
간단하게 해결 되는군;;

정보출처 : 현덕군
:
Posted by Lunaness
BOOL CFileManagerDlg::PreTranslateMessage(MSG* pMsg)
{
 if( pMsg->hwnd == m_List_Explorer.m_hWnd )
 {
  if(pMsg->message == WM_KEYDOWN)
  {
   if(::GetKeyState(VK_CONTROL) < 0 && pMsg->wParam == 'A')
   {
    for (int i=0; i<m_List_Explorer.GetItemCount(); i++)
     m_List_Explorer.SetItemState(i, LVIS_FOCUSED | LVIS_SELECTED, LVIS_FOCUSED | LVIS_SELECTED);
     
    return TRUE;
   }
  }
 }
 
 return CDialog::PreTranslateMessage(pMsg);
}

대략 이런식이다...
:
Posted by Lunaness