![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
DrawThemeBackground - CaptionButton - Windows XP (.NET) [D6, WinXP]
Ученик © (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 рисовать.