Что вы делаете, что, по вашему мнению, должно генерировать сообщение WM_UNICHAR?
Если ваш код (или код ATL) в конечном счете вызывает CreateWindowW, то ваше окно уже поддерживает Unicode, и сообщения WM_CHAR будут в формате UTF-16.
Документация далека от ясности о том, когда именно генерируется сообщение WM_UNICHAR, но из того, что я могу собрать в очень ограниченном просмотре в группах Google и в Интернете, похоже, что оно отправляется сторонними приложениями, а не самой Windows, если только окно не является окном ANSI (CreateWindowA и все такое). Вы пытались вручную отправить сообщение WM_UNICHAR в ваше окно, чтобы увидеть, что происходит? Если вы получаете сообщение, то в вашем коде отправки сообщения нет ничего плохого, и ничего не происходит, что могло бы вызвать WM_UNICHAR. Вы также можете проверить с помощью Spy ++ и посмотреть, получаете ли вы это сообщение, хотя я подозреваю, что оно просто не отправляется.