사용자가 TreeView 컨트롤에서 검사 상자를 클릭하는 시기를 아는 방법
이 문서에서는 사용자가 TreeView 컨트롤에서 검사 상자를 클릭하는 시기를 파악하는 방법을 설명합니다.
원래 제품 버전: Visual C++
원래 KB 번호: 261289
요약
TVS_CHECKBOXES 스타일이 있는 TreeView 컨트롤에서는 항목의 확인된 상태가 변경되었다는 알림이 없습니다. 항목의 상태가 변경되었음을 나타내는 알림도 없습니다. 그러나 사용자가 항목의 상태 아이콘을 클릭한 것을 확인하고 이에 따라 작업할 수 있습니다.
TreeView가 검사 상자의 상태를 토글하는 방법
사용자가 TreeView 항목 NM_CLICK
의 검사 상자를 클릭하면 알림이 부모 창으로 전송됩니다. 이 경우 메시지는 를 TVM_HITTEST
반환합니다 TVHT_ONITEMSTATEICON
. TreeView 컨트롤은 이 동일한 조건을 사용하여 검사 상자의 상태를 토글합니다. 아쉽게도 TreeView 컨트롤은 알림을 보낸 후 NM_CLICK
상태를 토글합니다.
사용자가 검사 상자를 클릭할 때 알 수 있는 샘플 코드
알림을 처리하는 NM_CLICK
동일한 창에 사용자 정의 메시지를 게시하고 이 사용자 정의 메시지를 확인된 상태가 변경되었다는 알림으로 처리할 수 있습니다. 다음 샘플 코드는 수행할 수 있는 방법을 보여 줍니다.
#define UM_CHECKSTATECHANGE (WM_USER + 100)
case WM_NOTIFY:
{
LPNMHDR lpnmh = (LPNMHDR) lParam;
TVHITTESTINFO ht = {0};
if(lpnmh->code == NM_CLICK) && (lpnmh->idFrom == IDC_MYTREE))
{
DWORD dwpos = GetMessagePos();
// include <windowsx.h> and <windows.h> header files
ht.pt.x = GET_X_LPARAM(dwpos);
ht.pt.y = GET_Y_LPARAM(dwpos);
MapWindowPoints(HWND_DESKTOP, lpnmh->hwndFrom, &ht.pt, 1);
TreeView_HitTest(lpnmh->hwndFrom, &ht);
if(TVHT_ONITEMSTATEICON & ht.flags)
{
PostMessage(hWnd, UM_CHECKSTATECHANGE, 0, (LPARAM)ht.hItem);
}
}
}
break;
case UM_CHECKSTATECHANGE:
{
HTREEITEM hItemChanged = (HTREEITEM)lParam;
/*
Retrieve the new checked state of the item and handle the notification.
*/
}
break
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기