Я работаю над проектом по переводу старого кода Windows 95 MFC на C ++ 11. Мне было интересно, если никакие кнопки мыши не нажимаются во время перемещения, каково значение UINT nFlags, переданного в функцию OnMouseMove ()?
Я не очень знаком с MFC, и у меня нет доступа к машине с Windows, чтобы самостоятельно выполнять какие-либо тесты, поэтому моё понимание поведения этих функций может быть неправильным. Я знаю, что если щелкнуть левой, средней или правой кнопкой мыши, есть специальные системные значения, которые функция OnMouseMove получит в nFlags (например, MK_LBUTTON, который равен 0x0001). Мне было интересно, каким будет значение для nFlags, если ничего не было нажато, а мышь двигалась, это просто 0x0000? Большое спасибо, любая помощь в этом вопросе очень ценится!
Да, это 0.
Но я думаю, что было бы безопаснее проверить документированные возможные значения, поэтому, если его использование изменится в будущем, код «0 в предположении» не сломается. Согласно MSDN для VS2012, это возможные значения:
MK_CONTROL Set if the CTRL key is down.
MK_LBUTTON Set if the left mouse button is down.
MK_MBUTTON Set if the middle mouse button is down.
MK_RBUTTON Set if the right mouse button is down.
MK_SHIFT Set if the SHIFT key is down.
где они в настоящее время определены (в Winuser.h) как:
#define MK_LBUTTON 0x0001
#define MK_RBUTTON 0x0002
#define MK_SHIFT 0x0004
#define MK_CONTROL 0x0008
#define MK_MBUTTON 0x0010
Других решений пока нет …