стиль окна
Пример во вложении
Пример во вложении
И как его подключить в Visual c++ studio 2005?:)
program.exe.manifest
Для Visual c++ studio 2005 необходимо в конфигурации проекта в поле Configuration Properties/Linker/Manifest File/Additional Manifest Dependencies вписать "type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*'"
Причем: 1. Компилить надо без "подключения" *80.dll иначе эти данные игнорируются... 2. В виде ресурса он некорректно подключается, если быть точнее - подключается но игнорируется...
Подробнее можно?
Вопрос вот в чем, у меня IE Toolbar на писан на C++Builder версии 5. Задать ему стиль ХР через манифест не получается (делаю как расписано в МСДН для плагинов) старый SDK видимо у 5-ки. Варианта два:
1. Править SDK (гиблое дело)
2. Нарисовать тулбар самому.
Взялся за пункт 2, все вроде ничего, но не могу добится "прозрачности".
Т.е. нужно нарисовать тулбар соответственно вкл/выкл схеме ХР. Тулбар должен быть транспарент, на нем есть едит-вох
Т.е. нужно нарисовать тулбар соответственно вкл/выкл схеме ХР. Тулбар должен быть транспарент, на нем есть едит-вох
// создаем окно
hWindow = CreateWindowEx(WS_EX_LAYERED|...);
if( hWindow )
{
// устанвливаем прозрачность
SetLayeredWindowAttributes(hWindow,0,0...255,LWA_ALPHA);
return TRUE;
}
а в билдере в свойствах окна можно его менять путем прописывания туда соответсвующее значение прозрачности...
hWindow = CreateWindowEx(WS_EX_LAYERED|...);
if( hWindow )
{
// устанвливаем прозрачность
SetLayeredWindowAttributes(hWindow,0,0...255,LWA_ALPHA);
return TRUE;
}
Мне не нужен полностью прозрачный тулбар.
а в билдере в свойствах окна можно его менять путем прописывания туда соответсвующее значение прозрачности...
Версию Билдера сообщил - 5, там такое делать нельзя, только с VCL 6 и старше.
Совет посмотреть предложенный исходник и почитать топик заново - там ответ на ваш вопрос. По исходнику вопросы можно задавать тут.
Чисто эксперементально определил... однажды... писал хитрый такой софтец по безопасности, и возникла необходимость подключить для удобства всякие стандартные весчи виндов чтобы свои не наворачивать, а так как были старые наработки то и навставлял их (там было использование InitCommonControls) а потом подключая новые, ранее неиспользуемые забыл напрочь прописать в начале - и оно работало :) удалил везде где было - все равно работает :). Попробовал на 2000 - неработает :( подключил - работает. Отключил, поставил SP4 - работает :)...
Вобщем после проведения типа лабораторной работы - мой собственный вывод - начиная с XP вызывать InitCommonControls необязательно... А может это просто глюк моих виндов... Тогда непонятно почему работает у остальных, кто пользуется данной моей прогой...
Функция InitCommonControls проверяет, что общая динамическая связь управляющей библиотеки (DLL) загружена.
Но ее можно не использовать. Достаточно связи с comctl32.dll и использования хотя бы одного из компонент этой библиотеки. Все это нужно для инициализации данного стиля.
У тебя, Yos, была загружена эта либрари. Вот почему было все ок. Тут чудес не бывает.
InitCommonControls влияет на линкер, который связывает библиотеку comctl32 с объектником. Линкер игнорирует неиспользуемый импорт, если ф-ю не вызывать, и не импортирует библиотеку, т.к. к ней нет ни одного вызовова. Поэтому вызывая эту ф-ю мы обманываем линкер.
А вот это зря. Приходится либо отключать, либо постоянно компилировать проект с лишними библиотеками, что очень избыточно, но это вопрос уже другой темы.
А Так как тема совсем другая, то по данному вопросу все... и извиняюсь за оффтоп...