WM_COMMAND mesajına ilişkin bir makro da ON_CONTROL makrosudur. Bu makro üç parametrelidir.
ON_CONTROL(nNotificationCode, nID, Func)
Bu makroyla belirtilen fonksiyon
HIWORD(wParam) = nNotificationCode
LOWORD(wParam) = nID
olduğunda çağrılır. Bu durumda toplam üç çeşit WM_COMMAND makrosu vardır.
1) ON_COMMAND: ID uyuşumu gerçekleştiğinde belirtilen fonksiyon çağrılır.
2) ON_CONTROL: Hem ID hem de notification code uyuştuğunda belirtilen fonksiyon çağrılır.
3) Kontrole özgü mesaj makroları: Bu makrolarda zaten makronun ismi hangi notification code gerçekleştiğinde fonksiyonun çağrılacağını anlatır. Notification code zaten makro ismiyle belirlendiğine göre bu makrolar iki parametre alırlar. Aslında kontrollere özgü mesaj makroları ON_CONTROL makrosu kullanarak oluşturulmuş birer makrodur. Örneğin:
#define ON_BN_CLICKED(id, Func) ON_CONTROL(BN_CLICKED, (id), (Func))
Burada sözü edilen üç tür mesaj makrosu da CWnd::OnCommand fonksiyonunun çağırdığı CCmdTarget::OnCmdMsg fonksiyonu tarafından ele alınır. Yani biz OnCommand sanal fonksiyonunu yazıp CWnd::OnCommand fonksiyonunu çağırmazsak bu mesaj makrolarının hiçbir tanesi işlem görmeyecektir.
