2013-06-05 3 views
1

Я работаю над проектом, переводящим старый код Windows 95 MFC на C++ 11. Мне было интересно, если во время перемещения нажать кнопки мыши, каково значение UINT nFlags, переданных в функцию OnMouseMove()?MFC Mouse motion OnMouseMove событие nFlags значение, если кнопки не нажаты?

Я не очень хорошо знаком с MFC, и у меня нет доступа к машине Windows, чтобы делать какие-либо тесты самостоятельно, поэтому мое понимание поведения этих функций может быть неправильным. Я знаю, что если он щелкнул левой кнопкой мыши, средний или правый, есть специальные системные значения, которые функция OnMouseMove будет получать в nFlags (например, MK_LBUTTON, которая равна 0x0001). Мне было интересно, какое значение будет для nFlags, если ничего конкретно не было нажато, а мышь движется, это просто 0x0000? Большое спасибо, любая помощь с этим вопросом очень ценится!

ответ

3

Да, это 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 
+0

Большое спасибо за хороший ответ! К счастью для моих целей, поскольку исходный код MFC полностью переписан на C++ 11, мне нужно только знать, что такое текущее поведение, чтобы я мог понять логику обработки дела и перевести что-то еще, поэтому я не думаю должна быть какая-либо озабоченность в отношении будущих изменений в использовании. Еще раз спасибо! – user1930581