프로그래밍
[MFC] MFC의 ListCtrl 에서 Item의 위치를 위아래로 변경하고 싶어요
밝음의기둥
2024. 8. 2. 13:36
반응형
안녕하세요, 윌리 프로젝트의 윌리 입니다.
ChatGPT에게 물어보았습니다.
질문 > MFC의 ListCtrl 에서 Item의 위치를 위아래로 변경하고 싶어요.
답변>
MFC (Microsoft Foundation Classes)에서 CListCtrl의 아이템 위치를 위아래로 변경하려면 다음 단계를 따르면 됩니다:
- 이동시키려는 아이템의 정보를 가져옵니다.
- 아이템을 이동시킬 위치에 새 아이템을 삽입합니다.
- 기존 아이템을 삭제합니다.
아래는 이러한 절차를 구현한 예제 코드입니다.
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
반응형