8. Запустить проект. Все должно работать, кроме выпадающего списка. Когда пользователь нажимает кнопку со стрелкой, щелчок на самой кнопке очень легко обработать в ветви WM_COMMAND, выловив идентификатор кнопки. Но вот как обработать щелчок на стрелке, чтобы появился выпадающий список? Теоретически, щелчок на этой стрелке должен генерировать константу TBN_DROPDOWN внутри поля lParam сообщения WM_NOTIFY, но, как выясняется, такой константы в этом поле нет. На самом деле в поле lParam помещается указатель на структуру LPTBNOTIFY, в которой есть поле hdr, в структуру которого входит поле code, в которое и помещается соответствующая константа. Значит, всего-то нужно выловить наличие константы в этом поле. Соответствующий код, располагающийся в процедуре WinProc, приведен в листинге 4.29. Листинг 4.29
case WM_NOTIFY:
//Ловим событие щелчка на стрелке к кнопке
if (((LPTBNOTIFY) lParam)->hdr.code == TBN_DROPDOWN)
{
//Находим углы кнопки, помещаем их в структуру lprc
SendMessage (g_hwndCB, TB_GETRECT, ((LPTBNOTIFY) lParam)->iItem, (LPARAM)(LPRECT)lprc);
//Находим место, где заканчивается окно, и начинается CB
i=CommandBar_Height(g_hwndCB);
//По найденным координатам выводим всплывающее меню так, чтобы оно
//в этой точке оказалось своим нижним правым углом (это задается
//константами TPM_RIGHTALIGN|TPM_BOTTOMALIGN
TrackPopupMenuEx(g_hmCB,TPM_RIGHTALIGN|TPM_BOTTOMALIGN, lprc->right, i, hWnd, NULL);
}
break;9. Программу можно запустить и посмотреть на результат ее работы.
Диалоговые окна
В предыдущем упражнении диалоговое окно уже добавлялось к проекту. Но это было сделано только для того, чтобы использовать помещенный на него компонент Combo Box для встраивания в Command Bar. Тем не менее, если в проекте необходимо использовать окна, выводимые на экран командами меню, то следует придерживаться определенной последовательности действий.
10. Добавить диалоговое окно к ресурсам проекта, как это было сделано в предыдущем упражнении.
11. Разместить на окне элементы управления с панели Controls окна редактирования диалога, как показано на рис. 4.13.