2008-10-20 9 views
1

어떻게 MFC CListCtrl에서 "탭 앤 홀드"동작을 구현할 수 있습니까?어떻게 MFC CListCtrl에서 "탭 앤 홀드"동작을 구현할 수 있습니까?

CDialog에 MFC CListCtrl이 있는데 CListCtrl에 "탭 앤 홀드"동작을 추가해야합니다. I가 의미 "를 길게 누른"무엇

는 :

사용자가 클릭이 CListCtrl 항목에 ("표준"은 마우스의 왼쪽 버튼으로 클릭)하면

는 A가 호출됩니다 작동합니다.

사용자가 CListCtrl 항목을 클릭하고 마우스의 왼쪽 버튼을 1 초 이상 누르고 있으면 함수 B가 호출됩니다.

답변

2

CListCtrl을 상속하고 OnLButtonDown 및 OnLButtonUp을 구현합니다. "탭 앤드 홀드"를하기 전에 기다려야하는 길이만큼의 OnLButtonDown에 타이머를 설정하십시오.

타이머 처리기에서 "길게 누르기"작업을 수행하십시오.

타이머가 만료되기 전에 OnLButtonUp 얻을 경우, 타이머를 취소하고 "클릭"작업을 수행 (OnLButtonUp의 CPOINT 매개 변수가 목록 항목 이상합니다.)

+0

마우스를 캡처하거나 사용자가 마우스를 아래로 움직이고 마우스를 올려 놓았을 때 마우스가 창 (또는 항목)에서 나올 때이를 감지하려고 할 수 있습니다. – Aardvark

+0

위 방법을 구현해 보셨습니까? 그들은 부름을 받았습니까? –

+0

예, 메소드를 구현했는데 뉴스 그룹에 설명되어 있습니다. –

1

을 ajryans 제안 이외에, 당신도 할 수있다 CListBox 파생 클래스를 서브 클래 싱하여 대화 상자에서 마우스 메시지를 가져와야합니다. 뭔가가 좋아.

BOOL CMyDialog::OnInitDialog() 
{ 
    MyListboxCtrl.SubclassDlgItem(ID_MYLISTBOX,this); 
    CDialog::OnInitDialog(); 
}