Re[2]: Style XP, TabControl и другие...
От: Elena_ Россия  
Дата: 27.01.04 23:37
Оценка: 6 (1)
Здравствуйте, Demon, Вы писали:

D>Здравствуйте, Shergin, Вы писали:


S>>Есть диалог, в нем есть TabControl, на нем есть какой-нибудь другой контрол, например CheckBox или тот же TabContol. Проблема в том, что в XP вкладки TabContol имеют белый цвет, а фон у других элементов управления стандартный (~серый), при их наложении получается некрасиво...

S>>Что делать?..
D>Меня спасло размещение на пейджах статиков. Объяснить это явление я не могу, у самого времени разбираться и тогда не было, и сейчас нет, поэтому с нетерпением жду объяснения знающих людей.

Может быть, пригодится:

EnableThemeDialogTexture Function

EnableThemeDialogTexture can be used to tailor dialog compatibility with child windows and controls that may or may not coordinate rendering their client area backgrounds with that of their parent dialog.

ETDT_ENABLE
Enables dialog window background texturing. The texturing is defined by a visual style.
ETDT_ENABLETAB
Enables dialog window background texturing. The texture is the Tab control texture defined by the visual style. This flag is equivalent to (ETDT_ENABLE | ETDT_USETABTEXTURE).
ETDT_DISABLE
Disables background texturing.
ETDT_USETABTEXTURE
Uses the Tab control texture for the background texture of a dialog window.
Пользователь — друг программиста!
Style XP, TabControl и другие...
От: Shergin Россия http://shergin.com/
Дата: 27.01.04 10:08
Оценка:
Есть диалог, в нем есть TabControl, на нем есть какой-нибудь другой контрол, например CheckBox или тот же TabContol. Проблема в том, что в XP вкладки TabContol имеют белый цвет, а фон у других элементов управления стандартный (~серый), при их наложении получается некрасиво...
Что делать?..
Валентин Шергин
http://shergin.com/
Re: Style XP, TabControl и другие...
От: Demon Россия  
Дата: 27.01.04 10:43
Оценка:
Здравствуйте, Shergin, Вы писали:

S>Есть диалог, в нем есть TabControl, на нем есть какой-нибудь другой контрол, например CheckBox или тот же TabContol. Проблема в том, что в XP вкладки TabContol имеют белый цвет, а фон у других элементов управления стандартный (~серый), при их наложении получается некрасиво...

S>Что делать?..
Меня спасло размещение на пейджах статиков. Объяснить это явление я не могу, у самого времени разбираться и тогда не было, и сейчас нет, поэтому с нетерпением жду объяснения знающих людей.
Re[2]: Style XP, TabControl и другие...
От: Shergin Россия http://shergin.com/
Дата: 28.01.04 15:57
Оценка:
Здравствуйте, Demon, Вы писали:

S>>Проблема в том, что в XP вкладки TabContol имеют белый цвет, а фон у других элементов управления стандартный ...

D>Меня спасло размещение на пейджах статиков. Объяснить это явление я не могу, у самого времени разбираться и тогда не было, и сейчас нет, поэтому с нетерпением жду объяснения знающих людей.

Да, со статиками ситуация немного другая... А как же другие элементы управления размещать?!..
Валентин Шергин
http://shergin.com/
Re[3]: Style XP, TabControl и другие...
От: Demon Россия  
Дата: 28.01.04 16:55
Оценка:
Здравствуйте, Shergin, Вы писали:

S>>>Проблема в том, что в XP вкладки TabContol имеют белый цвет, а фон у других элементов управления стандартный ...

D>>Меня спасло размещение на пейджах статиков. Объяснить это явление я не могу, у самого времени разбираться и тогда не было, и сейчас нет, поэтому с нетерпением жду объяснения знающих людей.

S>Да, со статиками ситуация немного другая... А как же другие элементы управления размещать?!..

У меня после размещения хотя бы одного статика, цвет подо всеми исправился. Я правда не помню что у меня там еще было, но точно что-то было что без статика плохо рисовалось.
Re[3]: Style XP, TabControl и другие...
От: Demon Россия  
Дата: 09.02.04 17:40
Оценка:
Здравствуйте, Elena_, Вы писали:

S>>>Есть диалог, в нем есть TabControl, на нем есть какой-нибудь другой контрол, например CheckBox или тот же TabContol. Проблема в том, что в XP вкладки TabContol имеют белый цвет, а фон у других элементов управления стандартный (~серый), при их наложении получается некрасиво...

S>>>Что делать?..
D>>Меня спасло размещение на пейджах статиков. Объяснить это явление я не могу, у самого времени разбираться и тогда не было, и сейчас нет, поэтому с нетерпением жду объяснения знающих людей.

E_>Может быть, пригодится:


E_>EnableThemeDialogTexture Function


Да, это очень похоже, НО у меня фон под контролами стал пестреньким, т.е. часть пикселей имеют цвет какой положено, часть чуть темнее, часть еще темнее.

Может у кого-нить есть еще идеи?
Re: Style XP, TabControl и другие...
От: night  
Дата: 11.02.04 08:09
Оценка:
Здравствуйте, Shergin, Вы писали:

S>Есть диалог, в нем есть TabControl, на нем есть какой-нибудь другой контрол, например CheckBox или тот же TabContol. Проблема в том, что в XP вкладки TabContol имеют белый цвет, а фон у других элементов управления стандартный (~серый), при их наложении получается некрасиво...

S>Что делать?..

вот здесь (ссылка) несколько способов решения проблемы (имхо)
Re: Style XP, TabControl и другие...
От: EugeneL  
Дата: 13.02.04 19:46
Оценка:
Здравствуйте, Shergin, Вы писали:

S>Есть диалог, в нем есть TabControl, на нем есть какой-нибудь другой контрол, например CheckBox или тот же TabContol. Проблема в том, что в XP вкладки TabContol имеют белый цвет, а фон у других элементов управления стандартный (~серый), при их наложении получается некрасиво...


Более того, не белый, а градиентный.

S>Что делать?..


Больше года назад озадачился той же проблемой: http://www.rsdn.ru/Forum/?mid=100176
Автор: EugeneL
Дата: 14.09.02
, но отсутствие ответов заставило заняться собстенными исследованиями.
К результатм и приглашаю: http://www.cargo.nnov.ru/xptab/
Re[2]: Style XP, TabControl и другие...
От: EugeneL  
Дата: 13.02.04 19:50
Оценка:
Поздно заметил, это это форум MFC, но, может поможет...
Re: Style XP, TabControl и другие...
От: Mika H http://x3dengine.da.ru
Дата: 14.04.04 14:35
Оценка:
Здравствуйте, Shergin, Вы писали:

S>Есть диалог, в нем есть TabControl, на нем есть какой-нибудь другой контрол, например CheckBox или тот же TabContol. Проблема в том, что в XP вкладки TabContol имеют белый цвет, а фон у других элементов управления стандартный (~серый), при их наложении получается некрасиво...

S>Что делать?..

Итак, есть два класса проблем, связанных с TabControl в Windows XP.

1. TabControl создаётся при помощи PropertySheet() см. MSDN. В этом случае (если есть манефест у приложения и не включена классическая тема) у некоторых элементов диалога, отображаемого поверх TabControl'а может наблюдаться серый фон. А может и не наблюдаться. Я не интересовался тем, когда такое случается, а когда нет. Тем не менее вызов EnableThemeDialogTexture(hDlg,6) из библиотеки uxtheme.dll, где в качестве hDlg надо сказать handle диалога, отбражаемого поверх TabControl'а решает все проблемы
(рекомендуется звать EnableThemeDialogTexture при создании hDlg; естественно необходимо звать её для всех отображаемых поверх TabControl'а диалогов).
Да, не забывайте, что EnableThemeDialogTexture отсутствует в старых Windows и необходимо следить за этим.

2. Пожалуй, самая интересная проблема возникает при попытке создания TabControl'а "вручную". Например, из ресурсника через CreateDialog. Как известно, в этом случае (при условии theming'a) EnableThemeDialogTexture() уже не спасает: градиенты у TabControl'а и у диалога, для которого была вызвана EnableThemeDialogTexture() отличаются, хотя и не очень сильно. Т.е. от использования EnableThemeDialogTexture() приходится отказаться. Но в этом случае необходимо красить фон диалога и его static'ов нужнной кисточкой, чтобы цвет согласовывался с градиентным фоном TabControl'а.

Решение этой проблемы предложено тут.
А так же можно использрвать вот этот вариант.

Но на этом проблемы не закончились. В обоих решениях будет наблюдаться глюк: запускаем наше приложение, когда используется theming, после чего переключаем Windows в классическое оформление. Вкладки TabControl'а не меняют свой фон и остаются белыми, в то время как всё остальное выглядит классически серым. Recreating нашего TabContorl'а, как удалось установить экспериментально, спасает не всегда. Однако спасла установка флажкка "Flat Buttons" в TRUE для TabControl'а в редакторе диалогов.

Тем не менее остаются ещё две аналогичные проблемы, связанные с TrackBar'ом и со ScrollBar'ом. Однако, подобные явления наблюдаются даже у PropertyPage и, к тому же, фон TrackBar'а и ScrollBar'а обычно исправляется при нажатии на них. В крайнем случае можно предложить recreating для элементов этого типа.

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

mikas@inbox.ru
Re[2]: Style XP, TabControl и другие...
От: Аноним  
Дата: 13.12.07 10:37
Оценка:
Здравствуйте, Mika H, Вы писали:

MH>Если у вас есть предложения лучше или замечания, пишите.

Хотелось бы поднять старую тему...Может быть у кого-то появились мысли по этому поводу.

Кроме того тут выяснилась интересная штука —

HWND hWndTabCtrl = CreateWindow(_T("SysTabControl32"), "", WS_CHILD|WS_VISIBLE|WS_CLIPCHILDREN|WM_CLIPSIBLINGS, 0, 0, 200, 240, hWnd, NULL, hInst, NULL);

TCITEM tie;
tie.mask = TCIF_TEXT|TCIF_IMAGE|TCIF_PARAM;
tie.iImage = -1;
tie.pszText = _T("aaaaaa");
tie.lParam = (LPARAM)0;
TabCtrl_InsertItem(hWndTabCtrl, 1, &tie);

Если написать этот код в НЕ MFC-шном приложении, то Tab Control выводится обычным серым цветом (без всяких стилей, как в старые добрые времена)...
Если же вписать это в CMainFrame::Create, то этот контрол выводится белым цветом....

ПОЧЕМУ???????????
Re[3]: Style XP, TabControl и другие...
От: Сергей  
Дата: 14.12.07 20:01
Оценка:
Здравствуйте, Аноним, Вы писали:

А>ПОЧЕМУ???????????


http://www.gotdotnet.ru/DotNet/FAQ/WindowsForms/Misc/312.aspx

Как заставить элементы управления отображаться в XP Style?

В приложениях, запускаемых под Windows XP, для control'ов по умолчанию используются библиотеки User32.dll и ComCtl32.dll версий 5.0. Для применения визуальных стилей к элементам управления необходимо дать указание использовать библиотеку ComCtl32.dll версии 6.00 или выше (в ней определены и 'user controls' и 'common controls'). Это можно сделать при помощи так называемого manifest'a, вот его пример в XML формате:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
  <assemblyIdentity version="1.0.0.0" processorArchitecture="X86" name="CompanyName.ProductName.YourApp" type="win32" />
  <description>Your application description here.</description>
  <dependency>
    <dependentAssembly>
      <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="X86" publicKeyToken="6595b64144ccf1df" language="*" />
    </dependentAssembly>
  </dependency>
</assembly>

Re[4]: Style XP, TabControl и другие...
От: Carc Россия http://www.amlpages.com/home.php
Дата: 15.12.07 06:26
Оценка:
" Сергей " <31732@users.rsdn.ru> сообщил/сообщила в новостях следующее: news:2767858@news.rsdn.ru...
> Здравствуйте, Аноним, Вы писали:
>
> А>ПОЧЕМУ???????????
>
> http://www.gotdotnet.ru/DotNet/FAQ/WindowsForms/Misc/312.aspx
>
> [q]
> Как заставить элементы управления отображаться в XP Style?
>
> В приложениях, запускаемых под Windows XP, для control'ов по умолчанию используются библиотеки User32.dll и ComCtl32.dll версий 5.0. Для применения визуальных стилей к элементам управления необходимо дать указание использовать библиотеку ComCtl32.dll версии 6.00 или выше (в ней определены и 'user controls' и 'common controls'). Это можно сделать при помощи так называемого manifest'a, вот его пример в XML формате:
И никакого манифеста не надо! Винда сама контрол меняет безо всяких моих усилий...
А вот ентого и не надо как раз. Нехай будет сереньким и прывычным.

Топикстартеру: по сабжу почему дефолтом сие проиходит?
Имхо это умолчания системы, т.к. и без моих усилий и манифестов Винда меняет и в ДИАЛОГАХ! В том же CPropertyPage тоже меняет на белый.
Попробую угадать а зачем это TabCtrl создается в CMainFrame? Поди CMDITabs? Угадал?

Отключить темы вообще можно и контрол будет серым.
в CTabCtrl::OnCreate
//Отмена тем Windows XP

const HMODULE h=GetModuleHandle(TEXT("uxtheme.dll"));

if (h) {

typedef HRESULT (__stdcall *PFUNC)(HWND,LPCWSTR,LPCWSTR);

PFUNC p=(PFUNC)GetProcAddress(h,TEXT("SetWindowTheme"));

if (p) {

const HRESULT hr=p(GetSafeHwnd(),L"",L"");

ASSERT(S_OK ==hr);

}//if (p) {

}//if (h) {
Posted via RSDN NNTP Server 2.1 beta
Aml Pages Home
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.