Visual Studio 6으로 작성된 MFC 응용 프로그램에 몇 가지 새로운 기능이 추가되었습니다. 사용자가 속성 페이지 내의 목록 컨트롤에서 머리글 열을 마우스 오른쪽 단추로 클릭하면 상황에 맞는 메뉴가 표시됩니다. CListCtrl 클래스가 클래스 마법사를 볼 추가되었습니다.MFC CListCtrl 마우스 오른쪽 버튼을 클릭하십시오.
속성 페이지의 ClassWizard를 통해 listctrl을 마우스 오른쪽 단추로 클릭하는 처리기를 추가했습니다. 이것은 호출 되 고 rclick이 헤더 섹션 위에 있고 어떤 헤더 항목에 있다면 다음 코드를 추가하여 해결합니다. 이와 같이
POINT Point;
GetCursorPos (&Point);
ScreenToClient(&Point);
HDHITTESTINFO HitTest;
//Offset of right scrolling
HitTest.pt.x = Point.x+ m_ctrlRecordList.GetScrollPos(SB_HORZ); //Offset of right scrolling
HitTest.pt.y = Point.y;
//Send the Hit Test Message
m_ctrlRecordList.GetHeaderCtrl()->SendMessage(HDM_HITTEST,0,(LPARAM)&HitTest);
// Check hit test result.
*pResult = 0;
그러나 히트 테스트는 항상 -1을 반환합니다.
대신 속성 페이지에서 헤더 컨트롤의 HDN_ItemClick 메시지를 처리하여 왼쪽 클릭을 시도했습니다. 이것은 클래스에서 모두 완료되었으므로 여기에서이 알림을 처리 할 수있을 것으로 예상됩니다. 그러나 내가 지금까지 연구 한 것으로부터 ClassWizard가이 코드를 코드에 넣는 버그가 MFC에있을 수 있지만이 알림은 목록 컨트롤의 부모까지 결코 도달하지 않습니다. 이 경우인가요?
이 작업을 수행하는 가장 좋은 방법은 무엇입니까? 오른쪽 클릭을 선호하지만 왼쪽 클릭은 필요한 경우 수행합니다.
대신 WM_CONTEXTMENU를 사용해보십시오. –
CListCtrl의 옵션으로 보이지 않습니다. 이렇게하는 올바른 방법처럼 보이지 않습니다. 확실히 누군가가리스트 컨트롤의 헤더를 마우스 오른쪽 버튼으로 클릭 할 때를 감지하는 간단한 방법이 있습니까? – Jonnster