프로그래밍

[MFC] MFC의 ListCtrl 에서 Item의 위치를 위아래로 변경하고 싶어요

밝음의기둥 2024. 8. 2. 13:36
반응형

안녕하세요, 윌리 프로젝트의 윌리 입니다.

ChatGPT에게 물어보았습니다.


질문 > MFC의 ListCtrl 에서 Item의 위치를 위아래로 변경하고 싶어요.

답변>

MFC (Microsoft Foundation Classes)에서 CListCtrl의 아이템 위치를 위아래로 변경하려면 다음 단계를 따르면 됩니다:

  1. 이동시키려는 아이템의 정보를 가져옵니다.
  2. 아이템을 이동시킬 위치에 새 아이템을 삽입합니다.
  3. 기존 아이템을 삭제합니다.

아래는 이러한 절차를 구현한 예제 코드입니다.

void CMyListCtrl::MoveItem(int from, int to)
{
    if (from == to) return;

    // Get item data from 'from' position
    LVITEM lvItem;
    ZeroMemory(&lvItem, sizeof(LVITEM));
    lvItem.mask = LVIF_TEXT | LVIF_IMAGE | LVIF_PARAM | LVIF_STATE;
    lvItem.iItem = from;
    lvItem.stateMask = LVIS_FOCUSED | LVIS_SELECTED;
    TCHAR szText[256];
    lvItem.pszText = szText;
    lvItem.cchTextMax = 256;

    this->GetItem(&lvItem);

    // Delete the item from the old position
    this->DeleteItem(from);

    // Insert the item at the new position
    lvItem.iItem = to;
    this->InsertItem(&lvItem);

    // Select the item if it was selected
    if (lvItem.state & LVIS_SELECTED) {
        this->SetItemState(to, LVIS_SELECTED, LVIS_SELECTED);
    }

    // Focus the item if it was focused
    if (lvItem.state & LVIS_FOCUSED) {
        this->SetItemState(to, LVIS_FOCUSED, LVIS_FOCUSED);
    }
}

이 함수를 호출하여 아이템을 이동할 수 있습니다:

void CMyListCtrl::MoveSelectedItemUp()
{
    int selected = this->GetNextItem(-1, LVNI_SELECTED);
    if (selected > 0) {
        MoveItem(selected, selected - 1);
    }
}

void CMyListCtrl::MoveSelectedItemDown()
{
    int selected = this->GetNextItem(-1, LVNI_SELECTED);
    if (selected != -1 && selected < this->GetItemCount() - 1) {
        MoveItem(selected, selected + 1);
    }
}

이제 MoveSelectedItemUp 및 MoveSelectedItemDown 함수를 사용하여 선택된 아이템을 위아래로 이동할 수 있습니다. 이 함수들은 CListCtrl의 파생 클래스에서 사용될 수 있습니다.

이 코드에서 CMyListCtrl는 CListCtrl의 파생 클래스이며, 필요에 따라 클래스 이름을 변경하여 사용하면 됩니다.


"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."


🎬 유튜브 채널 🎬

 

위로그@WiLog

📢 안녕하세요, 위로그@WiLog 시청자 여러분, 저는 윌리 입니다. 📢 위로그@WiLog 는 자기주도학습을 목적으로 라이브 스트리밍을 합니다. 📢 1인 게임 개발을 목표로 Unreal과 Blender를 학습 중입니

www.youtube.com


반응형