Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ребятушки выручайте надо CSplitterWnd раскрасить, точнее всё что от него осталось... 
V
    Опции темы
Torrero20
Дата 22.5.2006, 12:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 17.4.2006

Репутация: нет
Всего: нет



В общем в проге на Visual С++ главное окно разбито на 4 фрейма 3 мя сплиттерами (CSplitterWnd ) между этими фреймами остаються небольшие полоски вот их то и надо перекрасить....
Я его и так и эдак..... Создал дочерний класс, FillRect - ю весь Сплиттер в OnPaint e . Он конечно Эрэктиться smile но вместе с полосками ещё закрашиваються части окон по не понятному мне закону..... 
ВоД коД создания сплиттера в OnCreateClient MainWindow:

Код

m_Splitter.CreateStatic(this,1,2);

m_Splitter3.CreateStatic(&m_Splitter,2,1,WS_CHILD | WS_VISIBLE | WS_EX_STATICEDGE ,m_Splitter.IdFromRowCol(0,1));

m_Splitter2.CreateStatic(&m_Splitter,2,1, WS_CHILD | WS_VISIBLE | WS_EX_STATICEDGE,m_Splitter.IdFromRowCol(0,0));

m_Splitter2.CreateView(0,0,RUNTIME_CLASS(CTreeSearchView),CSize(500,400),pContext);
m_Splitter2.CreateView(1,0,RUNTIME_CLASS(CPreview),CSize(500,200),pContext);

m_Splitter3.CreateView(0,0,RUNTIME_CLASS(CFolderView),CSize(500,400),pContext);
m_Splitter3.CreateView(1,0,RUNTIME_CLASS(CReady),CSize(500,200),pContext);


А вот код раскраски в дочернем классе: (MySplitter производный от CSplitterWnd)

Код

void MySplitter::OnPaint()
{        
    CRect rect;
    CDC* pDC;
    pDC = GetWindowDC();
    CBrush newBr( RGB(255,0,0) );    
    GetWindowRect(&rect);        
    pDC->FillRect(&rect, &newBr);    
    
    CWnd::OnPaint();
}


ПомогЫыте! Плз....  

Это сообщение отредактировал(а) Torrero20 - 22.5.2006, 12:41
PM MAIL   Вверх
Earnest
Дата 22.5.2006, 14:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



Не надо переопределять OnPaint. Сначала хоть бы посмотрел на родную реализацию...
Переопредели OnDrawSplitter (это виртуальная функция). Но сначала разберись в ней. Навскидку, тебе нужно сначала вызвать родную версию, а потом зарисовать серединку нужным цветом. Но не всегда, а только в тех случаях, когда управление попадает на последнюю строку "родной" версии. Т.е. не в случае splitBorder.
 


--------------------
...
PM   Вверх
Torrero20
Дата 22.5.2006, 16:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 17.4.2006

Репутация: нет
Всего: нет



Почти всё круто... покрасил splitBar - спасибо smile ... Но в основном мне надо перекрасить splitBar + splitBorder. В общем и по краям тоже надо. Что бы вообще не было рамки и этой пресловутой тени и как бы вдавленности фреймов. 

Если ставлю обрабатываться и splitBorder... все нормально если не начинаешь предвигать сплиттер. Вот тут то и начинаеться непонятная закраска почти всех фремов полностью. Такая же чушь и с OnPaint ом была всё красилось, но если передвинешь....приплыли :-) !
 Может не правильно крашу воД коТ:
Код

void MySplitter::OnDrawSplitter (CDC *pDC,ESplitType nType,const CRect &rect)
{
    CSplitterWnd::OnDrawSplitter(pDC,nType,rect);
        
    if (nType == ESplitType::splitBar || nType == ESplitType::splitBorder )
    {
        CBrush br(RGB(255,255,255));    
        if (pDC )
            pDC->FillRect(&rect,&br);        
    }
}

<< -- Вот так корректно не работает, в чём тута дело??? 
PM MAIL   Вверх
Earnest
Дата 22.5.2006, 17:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



Если splitBorder, то просто сразу return (без вызова базового метода). Именно там 3D рамки рисуются.
Ну код-то посмотри как следует. Этот OnDrawSplitter из нескольких мест вызывается, иногда с довольно большими прямоугольниками. 


--------------------
...
PM   Вверх
Torrero20
Дата 23.5.2006, 13:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 17.4.2006

Репутация: нет
Всего: нет



Пасибуськи большушие ! Всё помогло smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.0570 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.