Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Visual C++/MFC/WTL > WTL, CTabView изм. цвет, шрифт заголовка закладки


Автор: maksqwe 28.3.2012, 13:17
Пытаюсь изменить цвет шрифта и устанавливать шрифт заголовка закладки жирным. Получается только изменить шрифт на жирный для всех закладок CTabView'a.
Собственно:

Код

CTabView m_view;
...
m_hWndClient = m_view.Create(m_hWnd, rcDefault, NULL, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN, WS_EX_CLIENTEDGE);


Тут каждой стринички(закладки) присваиваю свой листвив
Код

m_view.AddPage(pView[i].m_hWnd, _T(URL_MAIN));


Менять цвет получается только для всех закладок объекта "m_view", по отдельности неполучается, так как не вижу в доступных методах CTabView изменять конкретно шрифты отдельных закладок.
Код

m_view.m_tab.SetFont(FontToBold(m_view.GetFont()));


Кому инетерсно, функция изменяющая шрифт на жирный
Код

HFONT CMainFrame::FontToBold(HFONT hFont)
{
    LOGFONT lf;
    GetObject (hFont, sizeof(LOGFONT), &lf);
    lf.lfWeight = FW_BOLD;
    
    return CreateFontIndirect(&lf);
}


Как реализовать изменение шрифт и по возможности его цвет по отдельности лдя каждой закладки, а не для всех сразу?

Сначало думал все просто и создал просто массив объектов CTabView. Как и пршлый раз объявлял "m_view" в классе "CMainFrame"
Код
CTabView *m_view;


Потом...
Код

m_view = new CTabView[COUNT];
for (int i = 0; i < COUNT; ++i)
      m_hWndClient = m_view[i].Create(m_hWnd, rcDefault, NULL, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN, WS_EX_CLIENTEDGE);


Дальше как и выше. Тут то и кроется вся тайна :(  m_hWndClient присвается хендл только последнего объекта  m_view[COUNT-1]. Соответственно показывается только последняя закладка этого объекта. Если бы не это, спокойно можно было бы менять шрифт отдельно для каждой закладки.

Извините за нубский вопрос конечно, просто я только только начал изучать WTL. Как я понял, создаются CTabView'ы, но показывается толкьо последний который скопировал свой хендл m_hWndClient, а предыдущие не могут передать свои закладки этому последнему. 

Как быть? Я скорее всего не прав, разъясните пожалуста как лучше реализовать данную проблему и почему это так, заранее спасибо.

Автор: Earnest 29.3.2012, 14:41
Все, что идет после "Сначало думал все просто" просто бред; до этого все было правильно.
Вопрос с изменением фонта - это отдельная тема. Естественно, шрифт присваивается всему окну. Если хочешь извращаться с рисованием, смотри в сторону CustomDraw, кажется таб-контрол должен его поддерживать.  
В скобках.
С WTL вообще проблема, им мало кто пользуется и знает. И я в том числе. Но, поскольку, WTL - это довольно легкая обертка над WinAPI, то особых проблем быть не должно. Такие вещи лучше спрашивать в форуме по WinAPI.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)