Понятия не имею, что делает этот код .Прежде всего потому, что m_nCurrentColor = nID _ ID_COLOR_RED
не скомпилируется.У вас есть подчеркивание (_
) между nID
и ID_COLOR_RED
.Это ничего не значит для компилятора.Вместо этого вы хотели ввести знак минус (-
)?
Но в более общем смысле макрос ON_COMMAND
используется для обработки WM_COMMAND
сообщений.Макрос принимает два параметра:
id
, который является идентификатором команды memberFxn
, который является именем функции обработчика сообщений, в которую отображается команда
Похоже, у вас все настроено.Все три идентификатора команды (красный, зеленый и синий) обрабатываются одной и той же функцией OnColor
.
Итак, давайте посмотрим на документацию для WM_COMMAND
сообщения .Это говорит о том, что значение параметров wParam
и lParam
зависит от источника сообщения.Они имеют разные значения в зависимости от того, выбрал ли пользователь элемент из меню, набрал ли он клавишу ускорения или элемент управления отправляет уведомление в родительское окно.
Я не могу точно сказать из вашего вопроса, какойиз них ID_COLOR_RED
(и его братья) соответствуют.
Но это не имеет большого значения.В любом случае, это выглядит , как будто код пытается установить переменную-член (m_nCurrentColor
), которая отслеживает цвет, который в данный момент выбран пользователем, на основе идентификатора элемента, который отправилпоследнее уведомлениеЕсли мы предположим, что это знак минус , то все начинает немного фокусироваться:
То, что делает код, это получение идентификатора элемента, который отправляет сообщение (nID
) и вычитая из него первое значение в наборе (ID_COLOR_RED
).Это означает, что если nID
= ID_COLOR_RED
, то m_nCurrentColor
будет равно 0.
Если значения ID_COLOR_RED
, ID_COLOR_GREEN
и ID_COLOR_BLUE
равны последовательных (иэто большое , если , веская причина, по которой вы не должны писать такой код), тогда если nID
= ID_COLOR_GREEN
, m_nCurrentColor
будет равно 1. Аналогично, если nID
=ID_COLOR_BLUE
, тогда m_nCurrentColor
будет 2.