문제

나는 나무 개체 컨트롤을 사용하여 만인 ctreectrl MFC 클래스입니다.트리 제어 요구를 지원하는 이름을 바꿉니다.때 왼쪽 클릭의 모든 항목에서 트리 TVN_SELCHANGED 이벤트라고있는 나를 얻을 수 있는 선택 항목의 나무 아래와 같:HTREEITEM h=m_moveListTree.GetSelectedItem();메모 s=m_moveListTree.GetItemText(h);

그러나 때 나는 마우스 오른쪽 버튼으로 클릭하는 항목에서 트리득하지 않습니다 TVN_SELCHANGED 이벤트하고 따라서 내 항목을 선택한 아직도 남아 있 같은 왼쪽에서 이벤트를 클릭합니다.이것은 다음과 같은 문제를 일으키는:1)이용자 leftclicks 에 항목 2)사용자를 마우스 오른쪽 단추로 클릭 항목 B 고 말한 이름 바꾸기 3)때문에 선택된 항목은 여전히 이름 바꾸기에 적용 항목 A.

시기 바랍에 도움을 해결하는 문제입니다.

-프

도움이 되었습니까?

해결책

나는 내 자신을 만들었 MFC 집처럼 성장한 C++GUI 라이브러리에서 최고의 Win32API 를 보면서 내 코드는,이것은 어떻게 처리하는 상황:

LRESULT xTreeCtrl::onRightClick(NMHDR *)
{
  xPoint pt;

  //-- get the cursor at the time the mesage was posted
  DWORD dwPos = ::GetMessagePos();

  pt.x = GET_X_LPARAM(dwPos);
  pt.y = GET_Y_LPARAM (dwPos);

  //-- now convert to window co-ordinates
  pt.toWindow(this);

  //-- check for a hit
  HTREEITEM hItem = this->hitTest(pt);

  //-- select any item that was hit
  if ((int)hItem != -1) this->select(hItem);

  //-- leave the rest to default processing
  return 0;
}

내가 의심되는 경우 비슷한 작업을 수행에 MFC 를 마우스 오른쪽 버튼으로 클릭하거나 오른쪽 버튼을 아래로 이벤트를 해결하는 문제입니다.

참고:이 onRightClick 위 코드는 아무것도 더 이상 처리기 WM_NOTIFY, NM_RCLICK 메시지입니다.

다른 팁

이 행동에 의해 디자인-오른쪽 클릭하여 움직이지 않는 선택합니다.

무엇을 위해,당신이 원하는 차례에 TVS_EDITLABELS 스타일 트리에서 보기입니다.한 다음을 처리 TVN_BEGINLABELEDIT 및 TVN_ENDLABELEDIT 알림입니다.

지 방법 팝업 메뉴 그러나 사용할 수 있는 위치는 항상 등록 포인트()을 얻을 지점에서 나무에 항목입니다.그래서 당신은 수도에서 이를 사용하여 오른쪽 클릭하여 처리기입니다.

지 컨텍스트 메뉴가 활성화할 수도 있습으로 키에 합리적인 현대시키는 구성 요소입니다.당신은 아마 사용하려면 선택 항목으로 대상입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top