2010-02-28 6 views
2

내 응용 프로그램의 (커다란) 사용자 정의 컨트롤에 상황에 맞는 메뉴를 추가하려고하지만이를 만들 때 여러 가지 문제가 발생했습니다.wxWidgets 및 상황에 맞는 메뉴

오른쪽 마우스 클릭, 메뉴 키를 누른 상태에서 Shift + F10을 누르면 컨텍스트 메뉴를 생성해야하는 경우가 있습니다. 모든 경우에 메뉴는 ContextMenu 메서드에 의해 만들어지고 표시됩니다.

오른쪽 마우스는 다른 특별한 것들을하므로 항상 컨텍스트 메뉴를 생성하지는 않습니다. 다양한 마우스 이벤트를 처리하고 필요에 따라 ContextMenu를 호출합니다.이 모든 것이 잘 작동합니다.

문제는 키보드 생성 컨텍스트 메뉴 때문입니다. EVT_CONTEXT_MENU에 대한 컨트롤에서 처리기를 설정 한 다음 ContextMenu를 호출합니다. 많은 경우 두 키 조합 모두 무시되는 것처럼 보입니다. 때로는 Shift + F10이 올바르게 작동하지만 같은 경우 메뉴 키가 마우스 오른쪽 버튼 클릭 핸들러를 호출하여 잘못된 동작이 발생하는 경우가 있습니다 ...

메뉴 키의 경우 키 이벤트 처리도 시도했지만 다른 모든 키가 잘 작동하는 것 같다 있지만 메뉴 키를 결코

  1. 왜 어떻게 든 wxWidgets에 의해 무시 핵심 방법은 ... wxWidgets에 이러한 트리거 것 같다. 통제가 집중하는 한 그들은 일해야합니다. 그들이 "일하기"시작할 때 그들은 초점을 다시 잃을 때까지 일을 계속하지만, 왜 시작하지 않거나 시작하게 만들지는 모르겠다. (나는 컨텍스트 메뉴 나 키 이벤트를 다른 곳에서는 처리하지 않는다. 내 테스트 애플 리케이션).

  2. 키 이벤트 또는 컨텍스트 메뉴 이벤트 대신 EVT_RIGHT_UP 처리기에 메뉴 키 이벤트가 들어가는 방식은 무엇입니까?

는 나는 그러나 문서의 주위에 나는 내 문제에 관한 정보를 발견하지 않았습니다 얼마 동안 그물에보고 한 wxWidgets에이 키를 처리하는 방법에 대한 이해와 근본적으로 뭔가 문제, 가정.

Windows Vista에서 wxMSW 2.8.10을 사용하고 있습니다.

답변

2

wxWidgets는 마우스 나 키 이벤트로 인해 상황에 맞는 메뉴가 나타나게하는 것과 같은 플랫폼 차이를 추상화하는 라이브러리입니다. Ctrl + 마우스 버튼 한 개만 클릭하면 마우스가 아래로 움직이는 지 또는 마우스 위로 움직이는 지, 아니면 Mac에서 나타나는 지와 같은 차이가있을 수 있습니다. 따라서대신 마우스 및 키보드 이벤트를 직접 처리해야합니다. 이 모두 마우스와 키보드 이벤트 후에 호출됩니다 참고 :

wxContextMenuEvent :: 와과 GetPosition이 wxDefaultPosition을 반환하는 경우,이 이벤트가 키보드 상황에 맞는 버튼 이벤트에서 유래, 당신은 적절한 위치에 자신을 계산해야한다는 것을 의미합니다 예를 들어 wxGetMousePosition()을 호출하면됩니다. 당신은 또한 일부 마우스 이벤트에 대한 이벤트를 억제하고 그것을 가질 수

참고 다른 사람에 대해 생성 :

키보드 상황에 맞는 메뉴 버튼을 윈도우에 누를

, 기본 위치와 마우스 오른쪽 버튼으로 클릭 이벤트 이 이벤트가 처리되지 않으면 컨텍스트 메뉴 이벤트가 전송됩니다.따라서 마우스 이벤트를 처리하고 컨텍스트 메뉴 이벤트 핸들러가 호출되지 않는다면 마우스 오른쪽 버튼 이벤트에 대해 wxEvent :: Skip()을 호출 할 수 있습니다.

상황에 맞는 메뉴의 현재 코드를이 이벤트 처리기로 교체하면 좋을 것입니다. 컨텍스트 메뉴를 표시해야하는 모든 마우스 이벤트에 대해 event.Skip()을 호출해야 할 수도 있습니다. 이렇게하지 않으면 현재 일관성없는 결과가 발생하고있는 것입니다.

+0

내가 말했듯이 나는 wxContextMenuEvent를 사용하고 있는데, 어떤 이유로 그것들은 호출되거나 트리거되지 않는다. 다른 것들에 대한 내 컨트롤에서 마우스 이벤트를 처리해야하지만, 그 비트가 잘 작동합니다. 그 이유는 wxContextMenuEvent가 Windows 컨텍스트 메뉴 키 조합에 대해 처음부터 안정적으로 호출되지 않는 이유입니다. –

+0

좋아, 그 이유는 어떻게 든 마우스 처리기에 갇혀 점점 설명, 그리고 난 그냥 (-1, -1)에서 모든 마우스 이벤트를 확인하고 생략해야 할 것 같아요. 하지만 wxWidgets가 이벤트를 완전히 풀어 버리는 이유를 설명하지 못합니다. 즉, 메뉴 핸들러 나 shift + f10을 호출하는 핸들러가 없습니다. –

+0

'wxContextMenuEvent'만으로는 문제가 없었습니다. 키보드 이벤트가 작동하지 않으면 포커스 문제 일 수 있습니까? 그러나 어쨌든, (-1, -1)에서 이벤트 만 'Skip()'하지 않을 것이고, 컨텍스트 메뉴를 표시하지 않고 모든 좌표에 대해 * all * 이벤트를 호출 할 것입니다. – mghie

관련 문제