Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

DrawThemeBackground - CaptionButton - Windows XP (.NET) [D6, WinXP]


Страницы:   1 2

Ученик ©   (2002-10-02 09:01:00) 

Рисуется кнопка (своя) в заголовке окна с использованием DrawThemeBackground (WP_MINBUTTON),
Проблема: на кнопке присутствует значок минимизации;
Вопрос: возможно ли рисование кнопки без картинки, может режим какой-то надо установить, или в параметры чего-нибудь добавить ?


Игорь Шевченко   (2002-10-07 13:22:00) [1]

Если интересна дальнейшая дискуссия, со мной можно по аське связаться. Аська в анкете.


Ученик   (2002-10-07 12:44:00) [2]

>Игорь Шевченко © (07.10.02 12:35)
Ok, спасибо.


Игорь Шевченко   (2002-10-07 12:35:00) [3]

Ученик © (07.10.02 11:52)

Я не знаю деталей UxTheme.dll, поэтому ответить ничего не могу.
Кстати, не факт, что это что-то может значить, что отдельные картинки. Например, стандартный битмап для кнопки Close окна (OBM_CLOSE) нигде не хранится, а рисуется каждый раз в спец. DC.
Я не удивлюсь, если для кнопок из тем применен аналогичный способ.

На оба вторых вопроса ответ: Нет

По самому последнему вопросу можешь обратиться ко мне через пару месяцев или поискать в инете.

С уважением,


Ученик   (2002-10-07 11:52:00) [4]

Посмотрел ресурсы Windows\Resources\Themes\Luna\luna.msstyles, Fac-ы кнопок и значки на них отдельные BMP-ки,

При вызове DrawFrameControl окно меняет стиль на старый, поэтому такое утверждение.

NtUserBitBltSysBmp можно подменить в пользовательской программе ?

Есть описание параметров RegisterUserApiHook ?


Игорь Шевченко   (2002-10-07 11:42:00) [5]

Ученик © (07.10.02 11:34)

Есть. Это та самая функция, вызов которой заменяет следующие функции в USER32.DLL:

DefWindowProcA,
DefWindowProcW,
GetScrollInfo,
SetScrollInfo,
EnableScrollBar,
AdjustWindowRectEx,
SetWindowRgn,
GetSystemMetrics,
SystemParametersInfoA,
SystemParametersInfoW,
DrawFrameControl,
DrawCaption,
MDIRedrawFrame

Кнопка (стандартная, в заголовке окна) рисуется функцией NtUserBitBltSysBmp, а не GDIDrawStream.


> DrawFrameControl подменяется с целью отключения поддержки
> XP, если программа вызывает DrawFrameControl


Сомнительное утверждение. Есть источник или ссылка ?

С уважением,


Ученик   (2002-10-07 11:34:00) [6]

Если не ошибаюсь, кнопка рисуется функцией GdiDrawStream, но что ей дается на вход (в каком виде) не знаю, думаю, что-то типа метафайла из файла описывающего тему,
DrawFrameControl подменяется с целью отключения поддержки XP, если программа вызывает DrawFrameControl.

Обнаружил функцию RegisterUserApiHook, есть ли какая-либо информация по ней ?


Игорь Шевченко   (2002-10-07 10:09:00) [7]

День добрый, Ученик ©,

Поглядел я дома в Windows XP. Действительно, DrawFrameControl, будучи тупо выданный из приложения, не рисует картинку в стиле текущей темы XP. Тогда как DrawThemeBackground - рисует.
Но, дело в том, что фукнция DrawFrameControl перехватывается в user32.dll библиотекой UxTheme.dll и заменяется на функцию ThemeDrawFrameControl. Может, у окна, на котором рисуется FrameControl просто не установлены какие-то атрибуты ? Может, OpenThemeData недостаточно ?

Вопрос по-прежнему открыт :-)

С уважением,

С уважением,


Игорь Шевченко   (2002-10-04 15:01:00) [8]

Ученик © (04.10.02 14:58)

Дома в XP посмотрю


Ученик   (2002-10-04 14:58:00) [9]

>Игорь Шевченко © (04.10.02 14:54)
Рисуется Face-кнопки, потом рисуется Glyph с Transparent, поэтому измененения размеров не сказываются на рамке кнопки и значок на кнопке увеличивается до определенного размера.


Игорь Шевченко   (2002-10-04 14:54:00) [10]

Ученик © (04.10.02 14:42)

А до определенного размера меняется ? Значит - StretchBlt. win32k.sys считает, до какого момента можно выводить без видимых искажений, а потом просто не увеличивает размер Glyph"а.


Ученик   (2002-10-04 14:42:00) [11]

С определенного размера системной кнопки размер рисунка на ней не меняется, также не меняется рамка вокруг кнопки


Игорь Шевченко   (2002-10-04 14:39:00) [12]

Ученик © (04.10.02 14:35)

Glyph"ы на системных кнопках (minimize, maximize, restore, ...) рисуются с помощью StretchBlt. Сами Glyph"ы находятся в файле темы в виде ресурсов типа RT_BITMAP или RT_ICON, что в принципе, без разницы.

В чем именно я ошибаюсь ?


Ученик   (2002-10-04 14:35:00) [13]

>Игорь Шевченко © (04.10.02 14:32)
Вы ошибаетесь


Игорь Шевченко   (2002-10-04 14:32:00) [14]

Ученик © (04.10.02 14:13)

Glyph. Кнопки рисуются через StretchBlt


Ученик   (2002-10-04 14:13:00) [15]

>Игорь Шевченко © (04.10.02 14:11)
Размер системных кнопок можно изменить, например, до 100 пикселей, кнопка не Glyph


Игорь Шевченко   (2002-10-04 14:11:00) [16]

Ученик © (04.10.02 13:58)

Кнопка Minimize - элемент темы.
Твоя кнопка - не элемент темы.

Glyph - оно рулез. Честно.


Ученик   (2002-10-04 13:58:00) [17]

>Игорь Шевченко © (04.10.02 13:56)
Темы бывают разные, например Microsoft XP Plus


Игорь Шевченко   (2002-10-04 13:56:00) [18]

Ученик © (04.10.02 13:35)

Glyph вместе с Face. По DrawFrameControl именно такие Glyph"ы рисуются.


Ученик   (2002-10-04 13:35:00) [19]

>Игорь Шевченко © (04.10.02 13:22)
А кнопку без Glyph-а ? (чтобы Glyph нарисовать надо сначала Face кнопки нарисовать :-)


Игорь Шевченко   (2002-10-04 13:22:00) [20]

Ученик © (04.10.02 13:20)

Нарисовать свой Glyph для кнопки, по WM_NCPAINT рисовать.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо