Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Задать фон в Single document.

2.2K
02 сентября 2003 года
Alex_Odessa
30 / / 12.05.2003
Нужно сделать фон в рабочей области окна серым.
Никак не могу найти, как это задать в Single document. А перерисовывать в OnDraw постоянно не хотелось бы, и так программа критична к графике, да и не правильно это.
Надо что - то, как при регистрации окна без MFC:

WNDCLASSEX wcl;
wcl.hbrBackground =(HBRUSH)GetStockObject (LTGRAY_BRUSH);
...
RegisterClassEx(&wcl);

либо какой-то другой похожий способ.

Заранее спасибо за помощь.
3
02 сентября 2003 года
Green
4.8K / / 20.01.2000
Цитата:
Originally posted by Alex_Odessa
Нужно сделать фон в рабочей области окна серым.
Никак не могу найти, как это задать в Single document. А перерисовывать в OnDraw постоянно не хотелось бы, и так программа критична к графике, да и не правильно это.
Надо что - то, как при регистрации окна без MFC:

WNDCLASSEX wcl;
wcl.hbrBackground =(HBRUSH)GetStockObject (LTGRAY_BRUSH);
...
RegisterClassEx(&wcl);

либо какой-то другой похожий способ.

Заранее спасибо за помощь.



Если под MFC, посмотри
CWnd::OnCtlColor - удели внимание возвр. зн-ю
CWnd::OnEraseBkgnd - можно использовать CDC::GetBkColor

Если без MFC (Win32API напрямую или WTL), посмотри
WM_ERASEBKGND
WM_CTLCOLORDLG

2.2K
02 сентября 2003 года
Alex_Odessa
30 / / 12.05.2003
[QUOTE]Originally posted by Green


Если под MFC, посмотри
CWnd::OnCtlColor - удели внимание возвр. зн-ю
CWnd::OnEraseBkgnd - можно использовать CDC::GetBkColor

Надо под MFC.
Ты не мог бы немного по подробнее. Я попробывал использовать CWnd::OnCtlColor - пишет, что protected (вызывал из CLookApp::InitInstance()).
и еще, мне надо изменить цвет фона, а не узнать каков он ( не понял чем может помочь CDC::GetBkColor).
Попробывал
CLookView::OnDraw(CDC* pDC){
pDC->SetBkColor(RGB(255,25,0));
не видно никакого результата, хоть в принципе и искал не совсем это.
3.2K
02 сентября 2003 года
srd
50 / / 31.08.2003
Цитата:
Originally posted by Alex_Odessa
Нужно сделать фон в рабочей области окна серым.
Никак не могу найти, как это задать в Single document. А перерисовывать в OnDraw постоянно не хотелось бы, и так программа критична к графике, да и не правильно это.
Надо что - то, как при регистрации окна без MFC:

WNDCLASSEX wcl;
wcl.hbrBackground =(HBRUSH)GetStockObject (LTGRAY_BRUSH);
...
RegisterClassEx(&wcl);

либо какой-то другой похожий способ.

Заранее спасибо за помощь.



В классе CWnd есть виртуальная функция PreCreateWindow, которая вызывается перед созданием окна. Переопредели ее в своем классе окна. В этой функции можешь зарегистрировать новый оконный класс (например, с помощью AfxRegisterWndClass), указав нужную кисть для фона, и сохранить его имя в поле lpszClass структуры CREATESTRUCT.

BOOL Window:: PreCreateWindow(CREATESTRUCT &cs)
{
if (!CWnd:: PreCreateWindow(cs))
{
return FALSE;
}

cs.lpszClass = AfxRegisterWndClass(/* параметры для оконного класса */);

return TRUE;
}

Смотри, чтобы реализация функции в классе-предке вызывалась до твоих изменений параметра cs.

Извините, если не очень внятно объяснил.

3
02 сентября 2003 года
Green
4.8K / / 20.01.2000
Цитата:
Originally posted by Alex_Odessa
[QUOTE]Originally posted by Green


Если под MFC, посмотри
CWnd::OnCtlColor - удели внимание возвр. зн-ю
CWnd::OnEraseBkgnd - можно использовать CDC::GetBkColor

Надо под MFC.
Ты не мог бы немного по подробнее. Я попробывал использовать CWnd::OnCtlColor - пишет, что protected (вызывал из CLookApp::InitInstance()).
и еще, мне надо изменить цвет фона, а не узнать каков он ( не понял чем может помочь CDC::GetBkColor).
Попробывал
CLookView::OnDraw(CDC* pDC){
pDC->SetBkColor(RGB(255,25,0));
не видно никакого результата, хоть в принципе и искал не совсем это.



Вариант 1: если рабочая обл.должна быть серой всегда.
Находим в сгенеренном визардом коде метод
BOOL CChildView::PreCreateWindow(CREATESTRUCT& cs)
или т.п. Если метода нет то пишем его (не забудь объявить его в соотв.заголовочнике):

Код:
BOOL CChildView::PreCreateWindow(CREATESTRUCT& cs)
{
    if (!CWnd::PreCreateWindow(cs))
        return FALSE;

    cs.dwExStyle |= WS_EX_CLIENTEDGE;
    cs.style &= ~WS_BORDER;
    cs.lpszClass = AfxRegisterWndClass(CS_HREDRAW|CS_VREDRAW|CS_DBLCLKS,
//  ::LoadCursor(NULL, IDC_ARROW), reinterpret_cast<HBRUSH>(COLOR_WINDOW+1), NULL); // Wizard code
    ::LoadCursor(NULL, IDC_ARROW), reinterpret_cast<HBRUSH>(LTGRAY_BRUSH), NULL);   // My code

    return TRUE;
}


Вариант 2: цвет надо менять.
С помощью ClassWizard-а или вручную создаем обработчик WM_ERASEBKGND
 
Код:
BOOL CChildView::OnEraseBkgnd(CDC* pDC)
{
    CRect rc;
    GetClientRect(&rc);
    pDC->FillSolidRect(&rc, m_BackColor);
    return TRUE;
}

Далее создаем поле-член (переменую-член) m_BackColor, в которой и определяем цвет фона в текущий момент.

CWnd::OnCtlColor необходимо для того, чтобы делать фон контролов, рассположенных в окне, такого же цвета, как и фон самого окна.

Иногда можно обойтись без OnEraseBkgnd, если есть OnCtlColor и точно есть контролы в окне. Тогда можно просто вызывать в OnCtlColor метод SetBkColor. Но я бы не рекомендовал так делать.
А с GetBkColor я просто очепятался, хотел написать SetBkColor.

P.S. Блин, пока разжевывал, уже запостили про PreCreateWindow. Так что уж не сочтите за плагиат...
2.2K
03 сентября 2003 года
Alex_Odessa
30 / / 12.05.2003
Вариант 1: если рабочая обл.должна ...

Спасибо. Использовал первый метод. Извини, что не дорубил с первого раза. Зачем нужно было лезть в ...App. CView ведь наследник CWnd. Мне стыдно, что тебе пришлось так разжовывать. Мне надо больше работать и меньше всякой фигней заниматься, типа "а-ля у меня где - то было письмо на компе, а сейчас его нету, ты не мог бы найти".(слежу за сеткой в одной фирме). "Нет, значит не было".- И работать дальше. А то забуду и то что знал.
Это для View-ера. Почти - что как ACDSee версии эдак 2.4, вот только графика чуть медленнее. Пытаюсь сделать побыстрее. Но думаю, что без лучшего метода открытия графических файлов не обойдусь.
Еще раз спасибо.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог