WM_SETFOCUS отправляется в конкретное окно, которое получает фокус, а не к родителю, как вы обнаружили.
Однако есть альтернативный метод, который вы можете использовать, чтобы избежать создания подклассов; большинство элементов управления (в частности, «общие элементы управления», включающие ползунки) отправляют WM_NOTIFY своему родителю при возникновении определенных событий, что позволяет родителю обрабатывать эти события для коллекции дочерних элементов.
В вашем случае попробуйте прослушать сообщение WM_NOTIFY в родительском окне, в частности, проверить случай, когда идентификатор уведомления равен NM_SETFOCUS - из MSDN:
Уведомляет родительское окно элемента управления о том, что элемент управления получил фокус ввода. Этот код уведомления отправляется в виде сообщения WM_NOTIFY.
... звучит как то, что вы ищете. Очевидно, ATL поддерживает их в карте сообщений, используя NOTIFY_HANDLER , что-то вроде:
NOTIFY_HANDLER(IDC_SLIDERn, NM_SETFOCUS, func)
Обратите внимание, что это работает, потому что Win32 Common Controls поддерживает такой вид пересылки уведомлений; если бы вы использовали вместо этого какой-то другой пользовательский элемент управления, вы можете не получать эти уведомления и должны были бы прибегнуть к созданию подклассов. Но для общего контроля это самый простой способ сделать это.