Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.71/48: Рейтинг темы: голосов - 48, средняя оценка - 4.71
3 / 3 / 0
Регистрация: 22.02.2011
Сообщений: 15

Вывод текста на Aero Glass (dwmapi)

22.02.2011, 04:15. Показов 9806. Ответов 36
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Мне нужно вывести текст на стекле. Функция DrawThemeTextEx я так понял. Атрибуты страшны как ядерная война. Просто не имею опыта использования библиотек Windows. MSDN мне не слишком помог. Пожалуйста помогите разобраться с атрибутами.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
22.02.2011, 04:15
Ответы с готовыми решениями:

Glass-effect dwmapi. Кнопки.
Выручайте. При использовании модуля DMWAPI кнопки на форме (hwnd) не хотят нормально отображаться. Как исправить? library isAero; ...

[C#] Aero Glass
как реализовать эффект Aero Glass на C# WinForms пробовал вот так public static extern int DwmExtendFrameIntoClientArea( ...

Aero Glass - как выключить
Скачал какую-то сборку с включеным Aero Glass(размытие рамок окон), как увидел - сразу захотел выключить. Но незнаю как. У кого...

36
3 / 3 / 0
Регистрация: 22.02.2011
Сообщений: 15
22.02.2011, 09:26  [ТС]
Студворк — интернет-сервис помощи студентам
я подозреваю, что он просто делается прозрачным , вот этого простого
C++
1
Canvas->TextOut(10, 10, "Text");
- тоже нет
Он не должен делаться прозрачным. DWM рендерит все перед выводом на экран.
C++
1
Canvas->TextOut(10, 10, "Text");
подозреваю работает через GDI и пытается отобразиться сразу, еще до рендера поэтому процесс рендеринга его обрабатывает неправильно (у него недостаточно данных), а суть DrawThemeTextEx в том, что текст обрабатывается именно во время процесса рендеринга системой (предполагаю чрез GDI+). Функция содержит параметры указывающие этому процессу, как нужно отобразить текст (таким образом он владеет полной информацией) и выводит его верно, учитывая все параметры включающие в себя различные стандартные эффекты.

Добавлено через 6 минут
Цитата Сообщение от LK Посмотреть сообщение
где именно?
Вот здесь: LPCWSTR
Цитата Сообщение от MSDN
A pointer to a constant null-terminated string of 16-bit Unicode characters. For more information, see Character Sets Used By Fonts.

This type is declared in WinNT.h as follows:

typedef CONST WCHAR *LPCWSTR;
и обрати внимание на Memdc
Обратил, если сейчас успею попробую разобрать. А еще обратил, что первым аргументом просто Handle передается.
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
22.02.2011, 09:31
перевод:
указатель на оканчивающуся нулем строку символов 16-битного юникода. чтобы получить больше инфо, см...
этот тип объявлен в WinNT.h так:
typedef CONST WCHAR *LPCWSTR;

по ходу
C++
1
2
3
4
5
6
7
dwSize
Type: DWORD
Size of the structure.
// т.е.,
dttOpts.dwSize = sizeof(DTTOPTS);
// почему у тебя
dttOpts.dwSize = 20; // ?
0
3 / 3 / 0
Регистрация: 22.02.2011
Сообщений: 15
22.02.2011, 09:55  [ТС]
C++
1
2
// почему у тебя
dttOpts.dwSize = 20; // ?
Потому что, я думал что это размер текста. Задал размер структуры как ты. Попробовал менять и другие аргументы, тем до чего смог додуматься. Еще есть ошибки. =(
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
22.02.2011, 10:00
текст рисется в rect
а тут
C++
1
2
UnicodeString str = "Panel1";
HTHEME htheme = OpenThemeData(hWnd,str.c_str());
- имя контрола, я так понимаю
какие ошибки?
0
3 / 3 / 0
Регистрация: 22.02.2011
Сообщений: 15
22.02.2011, 10:15  [ТС]
Ошибки в логике.
имя контрола, я так понимаю
Я тоже так думаю, но не уверен, потому и передавал туда имя формы.
текст рисется в rect
Ну да. Наверняка исходя из локальных координат контрола.
и обрати внимание на Memdc
Пролистал. Попробовал так же. Почитал MSDN. По моему это то же самое, как и в данном случае.
C++
1
2
  HDC destdc = GetDC(hople_main_form->Handle);
  HDC Memdc = CreateCompatibleDC(destdc);
Может ерунду пишу? По моему одна переменная лишняя.

И кажется я понял зачем два раза передается хендл. В первом случае (hTheme) он передатся для контрола, во втором (hdc) для формы (полагаю особенности рендеринга).
1
Фрилансер
49 / 34 / 7
Регистрация: 12.01.2010
Сообщений: 186
Записей в блоге: 1
22.02.2011, 10:19
Цитата Сообщение от LK Посмотреть сообщение
ты учитывай, что уже утро
А еще говорят "Утро вечера мудренее" ...
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
22.02.2011, 10:22
Цитата Сообщение от BriGaDir_89 Посмотреть сообщение
А еще говорят "Утро вечера мудренее" ...
- ты, кажись, не в теме

И кажется я понял зачем два раза передается хендл. В первом случае (hTheme) он передатся для контрола, во втором (hdc) для формы (полагаю особенности рендеринга).
ну вот я и переоперделил :
C++
1
2
3
HDC Memdc = CreateCompatibleDC(hdc); // Set up a memory DC
...
DrawThemeTextEx (htheme, Memdc, 50, 50, L"Hello!", -1, uFormat, rec, &dttOpts);
1
3 / 3 / 0
Регистрация: 22.02.2011
Сообщений: 15
22.02.2011, 10:34  [ТС]
Ага только не помогает. =) Вообщем надо поспать, а вечером снова перебрать все атрибуты на чистую голову. И индексы (третий и четвертый аттрибуты) помучить, там им константы определены. На MSDN описаны, мало ли, вдруг в них дело. Да и за день может кто сталкивающийся с проблемой наткнется и ответит. =)
1
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
22.02.2011, 11:04
по ходу
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
//  UINT uFormat = DT_SINGLELINE|DT_CENTER|DT_VCENTER|DT_NOPREFIX;
...
  TRect rec;
//  rec = new tagRECT ();
  rec.left=10;
  rec.right=100;
  rec.top=10;
  rec.bottom=30;
  dttOpts.dwFlags = DTT_COMPOSITED|DTT_TEXTCOLOR|DTT_GLOWSIZE;
//  DwmIsCompositionEnabled(&bEnabled);
 
//  dttOpts.dwSize = 20;
  dttOpts.crText = 1;
  dttOpts.iGlowSize = 10;
  DrawThemeTextEx (htheme, Memdc, 50, 50, L"Hello!", -1, DT_SINGLELINE|
                                                         DT_CENTER|
                                                         DT_VCENTER|
                                                         DT_NOPREFIX,
                                                         &rec, &dttOpts);
гм, где ты примеры брал ?
0
KirsanovAlexJ
21.04.2011, 16:07
Предлагаю вам воспользоваться бесплатной библиотекой IT.DGT, которая позволяет вывести текст на поверхность AeroGlass и с облаком (различного цвета, размера и прозрачности) и без облака. Вывод текста осуществляется корректно в независимости от двойной буферизации.

Добавлено через 2 минуты
Вывод текста корректно посредством использования dwm невозможен без включения DoubleBuffered в true, в этом случае размещенные на поверхности формы элементы управления (наследники TWinControl) теряют прозрачность.
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
21.04.2011, 16:21
KirsanovAlexJ, ты никогда не получал удовольствия от того, что табурет сделал сам, а не купил в магазине ?
0
KirsanovAlexJ
21.04.2011, 16:37
В указанной вами статье обратите внимание как отображаются кнопки

Добавлено через 3 минуты
LK, К сожалению табурет от microsoft не работает и не существует ни одного работающего примера корректного вывода текста на поверхность aeroglass и сохранения при этом прозрачности контролов

Добавлено через 1 минуту
вышесказанное справедливо для Win32, для .Net проблема то ) успешно решена
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
21.04.2011, 17:04
похоже, мы говорим каждый о своем
0
Фрилансер
49 / 34 / 7
Регистрация: 12.01.2010
Сообщений: 186
Записей в блоге: 1
21.04.2011, 20:12
Ну блин, сам макрософак полюбому использует dwm для создания форм, вот как они это делают? Вопрос остается тоткрытым ...
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
22.04.2011, 01:54
макрософак
это что?
0
Фрилансер
49 / 34 / 7
Регистрация: 12.01.2010
Сообщений: 186
Записей в блоге: 1
22.04.2011, 08:05
Цитата Сообщение от LK Посмотреть сообщение
это что?
Microsoft
0
3 / 3 / 0
Регистрация: 22.02.2011
Сообщений: 15
26.05.2011, 10:58  [ТС]
Цитата Сообщение от KirsanovAlexJ Посмотреть сообщение
Предлагаю вам воспользоваться бесплатной библиотекой IT.DGT, которая позволяет вывести текст на поверхность AeroGlass и с облаком (различного цвета, размера и прозрачности) и без облака. Вывод текста осуществляется корректно в независимости от двойной буферизации.

Добавлено через 2 минуты
Вывод текста корректно посредством использования dwm невозможен без включения DoubleBuffered в true, в этом случае размещенные на поверхности формы элементы управления (наследники TWinControl) теряют прозрачность.
Уже разочаровался.) Спасибо попробую использовать DoubleBuffered! =)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
26.05.2011, 10:58
Помогаю со студенческими работами здесь

Как правильно отрисовывать TextBox при использовании Aero Glass
Научился правильно "рисовать" лейбл -> Но когда на форму с Aero Glass кладу текст-бокс, выходит это -> Как сделать нормальный...

Свойство StartPosition при использовании Aero Glass работает не всегда
Есть форма, на которой используется Aero Glass. В свойстве StartPosition установлен CenterScreen, но иногда он не работает. вот скрин: ...

Подсветка текста на стекле Aero, как в заголовке
сабж заранее спасибо

Как исправить искажение текста на форме со стилем Aero
Нужен совет, как можно решить проблему с отображением контура текста и изображееий на форме, если к ней применитт стиль Aero (Win7) и...

Dwmapi.dll
Приветствую всех. Столкнулся с проблемой в виде файла dwmapi.dll. Браузеры не запускаются, большинство приложений и антивирусы тоже не...


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

Или воспользуйтесь поиском по форуму:
37
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru