c++ - MFC: Confusion in an ON_COMMAND function? -


alright, here's function

  . . on_command (id_color_red, oncolor) on_command (id_color_green, oncolor)  on_command (id_color_blue, oncolor) . . .  void cmainwindow::oncolor () {     uint nid = (uint) loword (getcurrentmessage ()->wparam);     m_ncurrentcolor = nid _ id_color_red; }  

so, in here loword of wparam of currentmessage supposed contain message's id, that's okay, m_ncurrentcolor = nid _ id_color_red; means? m_ncurrentcolor can 0,1, or 2 red, green, or blue respectively...
first convert message's id uint in first statement, trying in second 1 m_ncurrentcolor = nid _ id_color_red?
can please explain?

i have no idea that code does. because m_ncurrentcolor = nid _ id_color_red won't compile. have underscore (_) between nid , id_color_red. doesn't mean compiler. did mean type minus sign (-), instead?


more generally, on_command macro used process wm_command messages. macro takes 2 parameters:

  • id, command id
  • memberfxn, name of message-hander function command mapped

it looks you've got set up. 3 command ids (red, green, , blue) being handled same oncolor function.


let's @ documentation wm_command message. says meaning of wparam , lparam parameters depends on source of message. have different meanings depending on whether user selected item menu, typed accelerator keystroke, or control sending notification message parent window.

i can't tell question of id_color_red (and brethren) correspond to.
doesn't matter. either way, looks code attempting set member variable (m_ncurrentcolor) keeps track of color selected user, based on id of item sent last notification. if assume that's minus sign, things start come focus little bit:

what code doing getting id of item that's sending message (nid), , subtracting first value in set (id_color_red). means if nid = id_color_red m_ncurrentcolor 0.

if values of id_color_red, id_color_green, , id_color_blue sequential (and big if, reason why shouldn't write code this), if nid = id_color_green, m_ncurrentcolor 1. likewise, if nid = id_color_blue, m_ncurrentcolor 2.


Comments