2012-08-16 3 views
0

내 프로그램이 크롬없는 창이고 사용자가 대화 상자의 일부를 끌면 창을 이동하려고합니다. WM_SYSCOMMAND를 사용하면 이후의 모든 마우스 이벤트가 손실됩니다.WM_SYSCOMMAND SC_MOVE가 마우스 이벤트를 일으키고 마우스가 위로 움직이지 않습니다.

먼저 WTL로 마우스 이벤트와 모든 작업을 캡처하는 프로그램을 작성했습니다.

BEGIN_MSG_MAP(CMainDlg) 
    MSG_WM_LBUTTONUP(OnMouseUp) 
    MSG_WM_LBUTTONDOWN(OnMouseDown) 
.... 
LRESULT OnMouseDown (UINT uKeys, CPoint pt) { 
    print ("on mouse down"); 
    return 0; 
} 
LRESULT OnMouseUp (UINT uKeys, CPoint pt) { 
    print ("on mouse up"); 
    return 0; 
} 

는 그럼 난에 위하면 onMouseDown 변경

LRESULT OnMouseDown (UINT uKeys, CPoint pt) { 
    print ("on mouse down"); 
    this->SendMessageW(WM_SYSCOMMAND, SC_MOVE|0x0002); 
    return 0; 
} 

드래그가 작동하고 창을 마우스로를 따라 이동합니다. 그러나 OnMouseUp 이벤트는 더 이상 발생하지 않습니다.

WM_NCHITTEST 또는 ProcessMessage setHandled를 사용하여 여러 가지 방법으로 시도했지만 성공하지 못하면 true/false로 시도했습니다. 사람이 어떤 제안 :

+1

WM_NCHITTEST가 적절한 해결책입니다. 시도한 코드를 게시하지 않았으므로 그 코드가 잘못된 것일 수는 없습니다. –

답변

0

WM_SYSCOMMAND의 DefWindowProc를 지나온 핸들러가 당신이 표시되지 않는 이유는 마우스 버튼까지 메시지를 먹는 것이있는 경우 대부분

을 주셔서 감사합니다. 그러나 SendMessage 호출은 드래그가 끝날 때까지 실제로 돌아 가지 않으므로 마우스 버튼을 클릭하는 것으로 알릴 수 있습니다.

관련 문제