SelectObject(HDC, ...)
От: Аноним  
Дата: 06.03.07 08:39
Оценка:
Здравствуйте. Есть код
    CDC memDC;
    memDC.CreateCompatibleDC(pDC);
    CBitmap *temp = memDC.SelectObject(m_Bmp);    
    TransparentBlt(pDC->m_hDC, x, y, dstX, dstY, memDC.m_hDC,
                   x1, y1, srcX, srcY, RGB(255,255,255));
    memDC.SelectObject(temp);

он взят из MSDN для MFC, для чистого WinAPI код схожий. Собственно, что мы здесь видим? А мы здесь видим что
после того как объект будет отрисован, вызывается функция SelectObject чтобы... А вот для чего она вызывается?
Просто и без нее все работает нормально. Может быть она не нужна? Спасибо за ответы.
Re: SelectObject(HDC, ...)
От: pjBrain  
Дата: 06.03.07 09:04
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте. Есть код

А>
А>    CDC memDC;
А>    memDC.CreateCompatibleDC(pDC);
А>    CBitmap *temp = memDC.SelectObject(m_Bmp);    
А>    TransparentBlt(pDC->m_hDC, x, y, dstX, dstY, memDC.m_hDC,
А>                   x1, y1, srcX, srcY, RGB(255,255,255));
А>    memDC.SelectObject(temp);
А>

А>он взят из MSDN для MFC, для чистого WinAPI код схожий. Собственно, что мы здесь видим? А мы здесь видим что
А>после того как объект будет отрисован, вызывается функция SelectObject чтобы... А вот для чего она вызывается?
А>Просто и без нее все работает нормально. Может быть она не нужна? Спасибо за ответы.

Она здесь для того чтобы вернуть на место BITMAP который был в данном контексте устройства первоначально.
Re[2]: SelectObject(HDC, ...)
От: Аноним  
Дата: 06.03.07 09:10
Оценка:
B>Она здесь для того чтобы вернуть на место BITMAP который был в данном контексте устройства первоначально.

А без нее можно? Зачем все это делать?
Re[3]: SelectObject(HDC, ...)
От: pjBrain  
Дата: 06.03.07 09:21
Оценка:
Здравствуйте, Аноним, Вы писали:

B>>Она здесь для того чтобы вернуть на место BITMAP который был в данном контексте устройства первоначально.


А>А без нее можно? Зачем все это делать?



CDC memDC;
memDC.CreateCompatibleDC(pDC);                            // создается контекст аналогичный pDC
CBitmap *temp = memDC.SelectObject(m_Bmp);                // устанавливается вместо BITMAP, что в контексте был при создании,
                                                          // рабочий BITMAP - m_Bmp 
TransparentBlt(pDC->m_hDC, x, y, dstX, dstY, memDC.m_hDC,
               x1, y1, srcX, srcY, RGB(255,255,255));     // выполняем TransparentBlt, где контекст источник memDC.m_hDC 
                                                          // и контекст приемник данных pDC->m_hDC
memDC.SelectObject(temp);                                 // возращаем BITMAP, что был первоначально,
                                                          // для правильного удаления контекста.
Re[3]: SelectObject(HDC, ...)
От: Чили Россия  
Дата: 06.03.07 10:12
Оценка:
Здравствуйте, Аноним, Вы писали:

А>А без нее можно? Зачем все это делать?

У меня отсутствие
memDC.SelectObject(temp);
никогда не приводило к ошибкам.
Вообще-то это правило хорошего тона в программировании.
Выделил память — Освободи память
Связал ресурс — Освободи ресурс
Скобку открыл — Закрой !!!!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.