이것은 내가 잃어 버렸기 때문에 온 전성 검사입니다.이상한 프로그램 및 디버거 if 문 동작
나는 열거 형 상태 구성원을 주어진 값과 비교하고 bool
을 반환하는 방법 IsCaptured()
을 가지고 있습니다. 드래그 시작 메시지를 보내고 드래그 작업을 시작해야하는지 결정하기 위해 마우스 임계 값 검사와 함께이 값을 사용합니다. 문제는 마우스가 움직여서는 안되는 경우에 트리거되는 것입니다. 다음과 같이 내가 추적 메시지를 추가했습니다 :
TRACE(L"%s\n", (IsCaptured()) ? L"true" : L"false");
CPoint delta = pt - m_trackMouse;
static CPoint thresh(GetSystemMetrics(SM_CXDRAG), GetSystemMetrics(SM_CYDRAG));
if (IsCaptured() &&
abs(delta.x) >= thresh.x || abs(delta.y) >= thresh.y)
{
TRACE(L"%s\n", (IsCaptured()) ? L"true" : L"false");
// Send message to enter drag mode
bool bDrag = ::SendMessage(m_trackWnd, WM_DD_BEGIN, ::GetDlgCtrlID(m_trackWnd), (LPARAM)(void*)&m_info) != 0;
// ...
}
을 지금 이상한 부분을, 출력은 : 아래로 차단 버튼이있을 때까지
false
false
방법은 그렇게하고 m_dragState
NONE
로 설정처럼 구현 :
enum { NONE, CAPTURED, DRAGGING };
bool IsCaptured() const { return m_dragState == CAPTURED; }
전체 솔루션을 다시 작성하려고 시도했습니다. VS2010 디버그 64 비트를 실행 중이며 프로그램은 단일 스레드 MFC 응용 프로그램입니다. $ @ #! 여기 가니?
괄호를 사용하는 것은 당신의 친구입니다. :) –