Valikko ei ole monista muista perinteisistä kontrolleista poiketen lapsi-ikkuna vaan se tallennetaan useimmiten resurssina, tosin valikoita voidaan luoda myös ajonaikana. Erilaisuudestaan huolimatta valikkoja käsitellään ruudunluvun näkökulmasta miltei samoin kuin ikkunoitakin. Valikko esimerkiksi lähettää viestejä omistajalleen aivan kuin painonappikin. Käyttäjän liikkumisesta valikoissa kertoo viesti WM_MENUSELECT, joka käsitellään esimerkkiohjelman WHNDCALLPROC-koukussa.
WM_MENUSELECT viestissä lParam on kahva (HMENU) nykyiseen valikkoon. wParamin ylimmät tavut ovat valittua alkiota (engl. item) koskevia tyylilippuja ja alimmat tavut kertovat minkä valikon alkion käyttäjä on valinnut. Alkio voidaan tunnistaa kahdella tavalla. Jos alkiolla on alivalikko, se tunnistetaan ainutlaatuisella tunnisteella (ns. command ID). Mikäli alivalikkoa ei ole, wParam-viestin alimmat tavut ovat alkion indeksiluku valikkoon. Lisäksi tietyt WM_MENUSELECT-viestin kenttien arvot tarkoittavat, että kyseinen valikko on juuri suljettu. Asia kiteytetään hyvin MSDN:ssä: "If the fuFlags parameter contains 0xFFFF and the hmenu parameter contains NULL, the system has closed the menu." (Microsoft, 1999, WM_MENUSELECT).
WM_MENUSELECT-viestin parametrit voidaan tallentaa paikallisiin muuttujiin seuraavasti. Huomaa alkion tunnistustavan tallentaminen muuttujaan:
HMENU handle = (HMENU) lParam;
UINT offset = LOWORD(wParam);
UINT flags = HIWORD(wParam);
if(flags == 0xFFFF && handle == NULL)
{ // The menu is closed.
lstrcat(textOut, "Menu closed\r\n");
return;
} // if
UINT offsetStyle; // Search by id or index.
if(flags & MF_POPUP)
offsetStyle = MF_BYPOSITION; // If it's got a popup, by index then.
else
offsetStyle = MF_BYCOMMAND; // By id.
Lause if(flags & MF_POPUP) tarkistaa tyylilipun olemassa olon. Valikkojen tyylit voidaan yhdistää bittitason tai-operaattorilla, joten lippujen vertailu onnistuu suoraan ja-toimituksella (engl. and-operation). MF_POPUP tarkoittaa, että valikolla on alivalikko. Muita yleisiä tyylejä ovat MF_GRAYED (alkiota ei voi valita) ja MF_CHECKED (alkioon liittyy valittu valintaruutu).
Valikkoalkion tekstin saa selville GetMenuString-funktiolla, tosin MSDN suosittelee käyttämään uudenpaa ja kattavampaa GetMenuItemInfo-funktiota. Jokatapauksessa GetMenuString ottaa parametreina kahvan valikkoon, valinnan tunnisteen, merkkijonon tekstille, jonon maksimipituuden ja lipun, joka määrittää tunnisteen tyypin (indeksi tai id). Suurinosa parametreista saadaan näppärästi osana WM_MENUSELECT-viestiä, joten varsinainen funktiokutsu on:
GetMenuString(handle, offset, textBuf, MAX_TEXT_LENGTH, offsetStyle);