Есть owner-draw попап-меню. Все итемы рисуются ручками. Также перерисовывается стандартная рамка всего окна попап-меню и делается плоской. Примерно так:
Под WinXP все шоколадно, а вот под Win2000 окно меню при всплывании имеет стандартный объемный вид до тех пор, пока по нему мышой не проведешь. Как только провели мышой над итемом — окно становится плоским, как и надо.
Вопрос: как вылечить это дело? Поиск по группогуглю облегчения не принес.
Здравствуйте, Flamer, Вы писали:
F>Под WinXP все шоколадно, а вот под Win2000 окно меню при всплывании имеет стандартный объемный вид до тех пор, пока по нему мышой не проведешь. Как только провели мышой над итемом — окно становится плоским, как и надо.
F>Вопрос: как вылечить это дело? Поиск по группогуглю облегчения не принес.
Попробуй поискать в сырцах XPMenu — компонента для делфи — Там в версии >> 3 эта проблема решена (если не ошибаюсь перехватывается создание окна для меню и там вручную все с ним творится)
[]
F>Под WinXP все шоколадно, а вот под Win2000 окно меню при всплывании имеет стандартный объемный вид до тех пор, пока по нему мышой не проведешь. Как только провели мышой над итемом — окно становится плоским, как и надо.
Вот, вылечилось. Может, кому и пригодится (спасибо AlexEagle за наводку). Работает в Win2000 и в WinXP. Делает плоским любое popup-меню. Мне многого было не нужно, поэтому код — минимальный... Да, забыл сказать — чтобы это добро работало, меню должно быть owner-drawn (проперть OwnerDraw = true и обработчик события OnDrawItem/OnAdvancedDrawItem для пунктов меню)... В общем, все по порядку (пример для билдера):
Здравствуйте, Flamer, Вы писали:
F>Вот, вылечилось. Может, кому и пригодится (спасибо AlexEagle за наводку). Работает в Win2000 и в WinXP. Делает плоским любое popup-меню. Мне многого было не нужно, поэтому код — минимальный... Да, забыл сказать — чтобы это добро работало, меню должно быть owner-drawn (проперть OwnerDraw = true и обработчик события OnDrawItem/OnAdvancedDrawItem для пунктов меню)... В общем, все по порядку (пример для билдера):
F>Все оказалось достаточно просто...
Не работает этот метод под Win2000 Server (под остальные не пробывал). Т.е. работает но криво с миганием.
Проблема в следующем:
После создания окна меню и первой орисовки, винда насильно перерисовывает рамку . Исследования показали, что это происходит после первой отрисовки и посылания сообщения WM_ENTERIDLE. Если в обработчике WM_ENTERIDLE снова запостить сообщение для перерисовки рамки — рамка затирается как надо, но это визуально видно (Вначале прорисовывается стандартная рамка и спустя некоторе время моя).
Какие есть идеи?
"For every complex problem, there is a solution that is simple, neat,
and wrong."