Поиск:

Ответ в темуСоздание новой темы Создание опроса
> OnEraseBkgnd(CDC* pDC), как узнать какую часть окан перерисовать 
V
    Опции темы
serg405
Дата 3.7.2009, 10:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



В большынстве случаев когда перехватывают WM_ERASEBKGND, внутри функции прописывают следующий код
Код

BOOL CMyWnd::OnEraseBkgnd(CDC* pDC)
{
    CRect rc;
    GetClientRect(rc);
    pDC->FillSolidRect(&rc,getBkColor());

    return TRUE;
}


но при чатсы перерисовках начинаеться мигание, я думаю должен быть способ узнать какую часть фона окна нужно перерисовать. 

Кто знает напишыте как вытащить из pDC квадрат который нуждаеться в перерисовке?

PM MAIL   Вверх
BorisVorontsov
Дата 3.7.2009, 10:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Thinker
**


Профиль
Группа: Комодератор
Сообщений: 714
Регистрация: 3.11.2005
Где: Молдавия, г. Киши нёв

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



Ты не избавишься от мерцаний, если будешь перерисовывать только требуемую область. Реализуй у себя двойную буферизацию, или оставь это системе, просто задав окну стиль WS_EX_COMPOSITE

По вопросу же, в WM_ERASEBKGND не передается регион. Регион передается в WM_PAINT.


--------------------
[code=cpp]
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;
[/code]
PM MAIL ICQ GTalk   Вверх
ksili
Дата 3.7.2009, 10:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2069
Регистрация: 3.11.2005
Где: Красноярск

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



Чем определяется этот квадрат? Если каким-то контролом на диалоге, то проблем быть не должно. Ко всем членам класса диалога имеется доступ из этой функции
Код

BOOL CFWTrayDlg::OnEraseBkgnd(CDC* pDC)
{

    BOOL result = CDialogEx::OnEraseBkgnd(pDC);

    try
    {
        Graphics graphics(pDC->m_hDC);
    
        if(m_ImageTop!=NULL)    // m_ImageTop объявлен в классе CFWTrayDlg
        {
                
            Rect rc(0 , 0, pagesArea.right , pagesArea.top );    // CRect pagesArea тоже член класса CFWTrayDlg
            
            graphics.DrawImage(
                    m_ImageTop,rc,0,0,m_imageTopWidth,m_imageTopHeight,UnitPixel);
        
        }
    }
    catch(...)
    {


    }

    return result;
}




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


 




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


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

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