내 프로그램이 크롬없는 창이고 사용자가 대화 상자의 일부를 끌면 창을 이동하려고합니다. 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로 시도했습니다. 사람이 어떤 제안 :
WM_NCHITTEST가 적절한 해결책입니다. 시도한 코드를 게시하지 않았으므로 그 코드가 잘못된 것일 수는 없습니다. –