Удаление фона у контр-в, расположенных на CTabCtrl (XP-стили
От: _Stash Россия  
Дата: 25.02.04 10:12
Оценка:
У меня есть CTabCtrl на закладках которого расположены разные окошки, мне нужно, чтобы у контролов (точнее у CheckBox'ов, статического текста и т.п.) как и у окна задний фон был прозрачным (т.к. используя XP-стили по-умолчанию у закладок Tab'а своеобразная заливка отображается (ну плавная смена цвета)). У окна я удаляю задний фон просто вызывая WM_ERASEBKGND, а вот у контролов в OnCtlColor задний фон прозрачным не становится (а становится белым). Я так понимаю, что все это из-за того что я удалил задний фон у окна, но как по-другому это осуществить не понимаю, "помогите кто-чем может =)"

для большей ясности попытаюсь привести часть кода, вот, примерно, как я делаю.
в файле mybasedlg.cpp
    CTabCtrl m_TabCtrl;
    TCITEM TabItem;
    ...
    m_TabCtrl.InsertItem( 0, &TabItem );
    ...
    pMyDlg = new CMyDlg; 
    TabItem.mask = TCIF_PARAM;
    TabItem.lParam = (LPARAM)pMyDlg; 
    m_TabCtrl.SetItem(0, &TabItem);
    VERIFY(pMyDlg->Create(CMyDlg::IDD, &m_TabCtrl));
    pMyDlg->SetWindowPos(NULL, 2, 22, 0, 0, SWP_NOSIZE | SWP_NOZORDER);
    pMyDlg->ShowWindow(SW_SHOW);
    ...

в файле mydlg.cpp я обрабатываю ON_WM_ERASEBKGND() чтобы удалить задний фон:
    BOOL CMyDlg::OnEraseBkgnd(CDC* pDC) 
    {
        // может здесь надо как-то более правильно это делать?-)
        return TRUE;
    }

кроме того в OnCtlColor я пытаюсь сделать задний фон у контролов прозрачным
(но он становится просто белым): pDC->SetBkMode(TRANSPARENT)

p.s. есть чем-то похожая тема: http://www.rsdn.ru/Forum/?mid=62812
Автор: BugMan
Дата: 11.06.02
, но у меня вроде pDC меняем ж)
Re: Удаление фона у контр-в, расположенных на CTabCtrl (XP-с
От: Master Gekus Россия  
Дата: 26.02.04 06:13
Оценка:
Здравствуйте, _Stash, Вы писали:

_S>У меня есть CTabCtrl на [...] своеобразная заливка отображается (ну плавная смена цвета)).

_S> [...]
_S>в файле mydlg.cpp я обрабатываю ON_WM_ERASEBKGND() чтобы удалить задний фон:
_S>
_S>    BOOL CMyDlg::OnEraseBkgnd(CDC* pDC) 
_S>    {
_S>        // может здесь надо как-то более правильно это делать?-)
_S>        return TRUE;
_S>    }
_S>


Столкнувшись с этой проблемой, я просто посмотрел с помощь SPY, чем обмениваются контролы, и дальше закрашивал фон с помощью WM_PRINTCLIENT, отправляя его Tab-control-у.

А еще есть библиотечка — UxTheme.dll — и там фукнкци DrawThemeBackground(Ex)

С уважением,
Заливочкин Евгений
Re: Удаление фона у контр-в, расположенных на CTabCtrl (XP-с
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 26.02.04 07:46
Оценка: +1
Здравствуйте, _Stash, Вы писали:

_S>У меня есть CTabCtrl на закладках которого расположены разные окошки, мне нужно, чтобы у контролов (точнее у CheckBox'ов, статического текста и т.п.) как и у окна задний фон был прозрачным (т.к. используя XP-стили по-умолчанию у закладок Tab'а своеобразная заливка отображается (ну плавная смена цвета)).


а если в OnInitDialog() CMyDlg-а вставить:

EnableThemeDialogTexture(GetSafeHwnd(), ETDT_ENABLETAB);
Re[2]: Удаление фона у контр-в, расположенных на CTabCtrl (X
От: _Stash Россия  
Дата: 26.02.04 08:39
Оценка:
Здравствуйте, Master Gekus, Вы писали:

MG>Столкнувшись с этой проблемой, я просто посмотрел с помощь SPY, чем обмениваются контролы, и дальше закрашивал фон с помощью WM_PRINTCLIENT, отправляя его Tab-control-у.


спасибо за ответ,
простите чайника, но нельзя ли чуть-чуть более развернуто, к примеру — когда(откуда) мне следует отправлять WM_PRINTCLIENT TabCtrl'у (я так понял с lParam = PRF_ERASEBKGND), а то у меня че-то не получается . (Я уже почти все перепробовал а в spy++ все равно WM_PRINTCLIENT посылается с PRF_CLIENT и фиг знает когда Может можно как-то через WindowProc культурно менять lParam?

MG>А еще есть библиотечка — UxTheme.dll — и там фукнкци DrawThemeBackground(Ex)


у DrawThemeBackground для меня слишком высокие требования да и вроде проще кажется просто задний фон удалить
Re[2]: Удаление фона у контр-в, расположенных на CTabCtrl (X
От: _Stash Россия  
Дата: 26.02.04 08:44
Оценка:
Здравствуйте, Odi$$ey, Вы писали:

OE>а если в OnInitDialog() CMyDlg-а вставить:


OE>
OE>EnableThemeDialogTexture(GetSafeHwnd(), ETDT_ENABLETAB);
OE>


для этого надо сначала найти uxtheme.h/uxtheme.lib (у меня VС6 )), ну если с WM_PRINTCLIENT ниче не выйдет до вечера — попытаюсь, спасибо.
Re[2]: Удаление фона у контр-в, расположенных на CTabCtrl (X
От: _Stash Россия  
Дата: 26.02.04 08:54
Оценка:
Здравствуйте, Odi$$ey, Вы писали:

OE>а если в OnInitDialog() CMyDlg-а вставить:

OE>
OE>EnableThemeDialogTexture(GetSafeHwnd(), ETDT_ENABLETAB);
OE>


а возможно к UxTheme.dll "динамически" (в период выполнения) подключиться?
Re[3]: Удаление фона у контр-в, расположенных на CTabCtrl (X
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 26.02.04 09:21
Оценка: 3 (1)
Здравствуйте, _Stash, Вы писали:

_S>для этого надо сначала найти uxtheme.h/uxtheme.lib


http://www.rsdn.ru:80/File/82/uxtheme.rar
Re[3]: Удаление фона у контр-в, расположенных на CTabCtrl (X
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 26.02.04 09:21
Оценка:
Здравствуйте, _Stash, Вы писали:

_S>а возможно к UxTheme.dll "динамически" (в период выполнения) подключиться?


ко всем можно
Re[4]: Удаление фона у контр-в, расположенных на CTabCtrl (X
От: _Stash Россия  
Дата: 26.02.04 10:10
Оценка:
Здравствуйте, Odi$$ey,

С ума сойти — получилось! Спасибо большое за ссылку на uxtheme.lib/uxtheme.h (я в h-шке посмотрел код ETDT_USETABTEXTURE) и подключился без проблем к dll-ке =)
Re[5]: Удаление фона у контр-в, расположенных на CTabCtrl (X
От: Shergin Россия http://shergin.com/
Дата: 08.07.04 23:48
Оценка:
Здравствуйте, _Stash, Вы писали:

_S>С ума сойти — получилось! Спасибо большое за ссылку на uxtheme.lib/uxtheme.h (я в h-шке посмотрел код ETDT_USETABTEXTURE) и подключился без проблем к dll-ке =)


А у меня не получилось!
Линковщик ругается на EnableThemeDialogTexture(GetSafeHwnd(), ETDT_ENABLETAB); типа он protected и все такое...
Почему?..
Как сделал ты? Поделись исходниками!
Валентин Шергин
http://shergin.com/
Re[6]: Удаление фона у контр-в, расположенных на CTabCtrl (X
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 09.07.04 03:19
Оценка:
Здравствуйте, Shergin, Вы писали:

S>Линковщик ругается на EnableThemeDialogTexture(GetSafeHwnd(), ETDT_ENABLETAB); типа он protected и все такое...

S>Почему?..

какой еще protected это winapi-шная функция

S>Как сделал ты? Поделись исходниками!


приведи дословно текст ошибки
Re[6]: Удаление фона у контр-в, расположенных на CTabCtrl (X
От: Nerox  
Дата: 28.04.07 05:39
Оценка:
Здравствуйте, Shergin, Вы писали:

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


_S>>С ума сойти — получилось! Спасибо большое за ссылку на uxtheme.lib/uxtheme.h (я в h-шке посмотрел код ETDT_USETABTEXTURE) и подключился без проблем к dll-ке =)


S>А у меня не получилось!

S>Линковщик ругается на EnableThemeDialogTexture(GetSafeHwnd(), ETDT_ENABLETAB); типа он protected и все такое...
S>Почему?..
S>Как сделал ты? Поделись исходниками!


#pragma comment( lib, "uxtheme.lib" )
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.