Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Рисуем элементы меню, на диалоге 
:(
    Опции темы
LerikCo
  Дата 23.4.2014, 18:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 23.4.2014

Репутация: нет
Всего: нет



Доброго времени суток!

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

Что сделал:
В карту обработчика сообщений диалога добавил
Код
ON_WM_DRAWITEM()
ON_WM_MEASUREITEM()
ON_WM_INITMENUPOPUP()

Ну, естественно, в MenuTestDlg.h диалога добавил
Код
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 диалога добавил
Код
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 определяет прямоугольник под иконой. Получить рект всего элемента не знаю как.
Во-вторых, даже задавая рект для всего элемента вручную, вижу только фрагмент отрисовки своего прямоугольника, всё остальное накрывает текст элемента.
В третьих, не понимаю, как различать выделенный и невыделенный элемент меню.

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


ЗЫ: 
Что было прочитано:
[COLOR=gray]ФАК 74[/COLOR]
[COLOR=gray]Как вставить иконки в стандартное меню[/COLOR]
[COLOR=gray]иконки в меню[/COLOR]
[COLOR=gray]menu[/COLOR]
[COLOR=gray]www.codeproject.com/Articles/16529/Simple-Menus-That-Display-Icons-Minimalistic-Appro[/COLOR]
[COLOR=gray]www.codeproject.com/Articles/2354/Owner-Drawn-Menu-with-Icons-Titles-and-Shading[/COLOR]
[COLOR=gray]www.realcoding.net/articles/glava-12-v-glubine-menyu.html[/COLOR]

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

С уважением и надеждой!
PM MAIL   Вверх
vol4ek
Дата 23.4.2014, 19:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


конь в пальто
**


Профиль
Группа: Участник
Сообщений: 304
Регистрация: 1.5.2011
Где: Минск

Репутация: 0
Всего: 0



Цитата(LerikCo @  23.4.2014,  18:49 Найти цитируемый пост)
Необходимо добавить в него иконки и разрисовать элементы в стиле Office2003, т.е. под иконкой фон закрашивать синим, выделенный элемент подсвечивать желто-розовым, обводить рамкой.

Цитата(LerikCo @  23.4.2014,  18:49 Найти цитируемый пост)
ЗЗЫ: Не откажусь от уже готового класса, если таковой имеется.

читать это
потом вот это
ну а если хочется покопаться в коде, создаете MDI или SDI приложение с стилем Office и можете там копошиться.

Добавлено через 42 секунды
перенесите тему пожалуйста.
PM MAIL ICQ   Вверх
LerikCo
Дата 23.4.2014, 19:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 23.4.2014

Репутация: нет
Всего: нет



vol4ek, не очень понял, зачем мне "ленты", если я говорил про меню в стиле 2003?

ЗЫ: Проект изначально написан на VC6. Преобразовывать к другим версиям нежелательно.

Это сообщение отредактировал(а) LerikCo - 23.4.2014, 19:55
PM MAIL   Вверх
vol4ek
Дата 23.4.2014, 20:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


конь в пальто
**


Профиль
Группа: Участник
Сообщений: 304
Регистрация: 1.5.2011
Где: Минск

Репутация: 0
Всего: 0



Цитата(LerikCo @  23.4.2014,  19:53 Найти цитируемый пост)
vol4ek, не очень понял, зачем мне "ленты", если я говорил про меню в стиле 2003?

дело в том что меню в офисе - не меню, а панель быстрого доступа созданная конструктором на ленте и класса CMenu там нет в помине.  smile 



PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0425 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.