Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
Lerik-Co

Рисуем элементы меню (на диалоге)

23.04.2014, 21:05. Показов 1607. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток!

Что требуется:
На диалоговом окне (C++, MFC) CMenuTestDlg есть главное и контекстные меню, созданные в редакторе ресурсов.
Необходимо добавить в него иконки и разрисовать элементы в стиле Office2003, т.е. под иконкой фон закрашивать синим, выделенный элемент подсвечивать желто-розовым, обводить рамкой.
Многим (разным) пунктам меню должна соответствовать одна и та же иконка.
Иконки 32-bit хранятся в ресурсах в виде икон (не тулбар!).

Что сделал:
В карту обработчика сообщений диалога добавил
C
1
2
3
ON_WM_DRAWITEM()
ON_WM_MEASUREITEM()
ON_WM_INITMENUPOPUP()
Ну, естественно, в MenuTestDlg.h диалога добавил
C
1
2
3
afx_msg void OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpdis);
afx_msg void OnInitMenuPopup(CMenu* pMenu, UINT nIndex, BOOL bSysMenu);
afx_msg void OnMeasureItem(int nIDCtl, LPMEASUREITEMSTRUCT lpmis);
а в MenuTestDlg.cpp диалога добавил
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
void CMenuTestDlg::OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpdis)
{
    if ((lpdis==NULL)||(lpdis->CtlType != ODT_MENU))
    {
        CDialog::OnDrawItem(nIDCtl, lpdis);
        return; //not for a menu
    }
    //..
}
void CMenuTestDlg::OnMeasureItem(int nIDCtl, LPMEASUREITEMSTRUCT lpmis)
{
     if ((lpmis==NULL)||(lpmis->CtlType != ODT_MENU))
     {
         CDialog::OnMeasureItem(nIDCtl, lpmis); //not for a menu
         return;
     }
     //..
}
void CMenuTestDlg::OnInitMenuPopup(CMenu* pMenu, UINT nIndex, BOOL bSysMenu)
{
//..
}
Что получилось:
Функции OnMeasureItem() и OnDrawItem() вызываются, всё нормально. Иконку в OnDrawItem() рисую, проблем нет.
Но не могу рисовать по элементу меню в том месте, где выводится текст.
Во-первых, lpdis->rcItem определяет прямоугольник под иконой. Получить рект всего элемента не знаю как.
Во-вторых, даже задавая рект для всего элемента вручную, вижу только фрагмент отрисовки своего прямоугольника, всё остальное накрывает текст элемента.
В третьих, не понимаю, как различать выделенный и невыделенный элемент меню.

Помогите для начала банально залить весь прямоугольник невыделенного элемента меню красным.


ЗЫ:
Что было прочитано:
ФАК 74



www.codeproject.com/Articles/16529/Simple-Menus-That-Display-Icons-Minimalistic-Appro
www.codeproject.com/Articles/2354/Owner-Drawn-Menu-with-Icons-Titles-and-Shading
www.realcoding.net/articles/glava-12-v-glubine-menyu.html

ЗЗЫ: Не откажусь от уже готового класса, если таковой имеется.

С уважением и надеждой!
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
23.04.2014, 21:05
Ответы с готовыми решениями:

Для каждого массива в диалоге ввести размер массива и элементы массива и найти сумму и среднее арифметическое значение для каждого массива
даны 3 различных массива целых чисел(размер каждого не должен превышать 15). Для каждого массива в диалоге ввести размер массива и элементы...

Список в диалоге
Доброе время суток! Ситуация такая из главного окна вызывается диалог в которой LISTBOX, кнопки добавить и удалить. при нажатии на добавить...

Картинка на диалоге
Подскажите как на диалог поставить картинку,через файл ресурсов ставил она там появляетчья а в программе ее нету на диалоге

1
Заблокирован
23.04.2014, 22:38
P.S.: создай в VisualStudio последней MFC проект с полным набором фарша в как раз твоём стиле Office и посмотри как там всё сделано.
Миниатюры
Рисуем элементы меню (на диалоге)  
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
23.04.2014, 22:38
Помогаю со студенческими работами здесь

Тулбар в диалоге
Подскажите, как в QtCreator добавить QToolBar на QDialog (или на QWidget). Ситуация такая: из главного окна вызывается диалог, на котором...

EditText в диалоге
В такой диалог нужно добавить второй EditText, возможно ли это и (если возможно) то как?

VideoView в диалоге
Всем привет. У меня в диалоговом окне есть videoview и кнопка, при нажатии на которую открывается ссылка и при возвращении в приложение...

Ошибка в диалоге
Простенькая программа открытия файла из меню компилируется, но при вызове open программа зависает... вероятно чтото с преобразованием...

Рисуем кнопочку
Привет форумчане, хочу немного поменять стиль кнопки, для начала сделаю её круглой: GraphicsPath butPath = new...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита, которое может. . .
Команды "Заполнить" и "Очистить" на форме документа
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". На примере нетипового документа разработанного в конфигурации КА2. В качестве источника данных указан регистр накопления, в который записываются данные о. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru