Что делает SelectObject (dc, hBMP)? - PullRequest
8 голосов
/ 17 января 2011

Полагаю, я понимаю, что происходит, если я выбираю «объект» в «контекст устройства», и если этот объект представляет собой brush , font , pen : символы этих объектов, следовательно, используются для рисования в контексте устройства.

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

У меня есть программа, которую кто-то делает

HDC dc = ::GetDC(hWnd);

ffBitmap   = ::CreateCompatibleBitmap(dc, windowWidth, windowHeight);
ffMemoryDc = ::CreateCompatibleDC(dc);

hOldBitmap          = (HBITMAP) ::SelectObject(ffMemoryDc, ffBitmap);

, а затем обращается к ffMemoryDc , а затем * BitBlt * s ffMemoyDc в real контекст устройства окна.

BitBlt ( dc, 
         0, 0, windowWidth, windowHeight,
         ffMemoryDc,
         0, 0,
         SRCCOPY
       );

Переменная ffBitmap нигде не упоминается во всей программе, однако, если я не выберу SelectObject (ffBitmap), ничего не будет нарисовано, поэтому необходимо .

Буду признателен, если кто-нибудь сможет пролить свет на то, что здесь происходит.

1 Ответ

3 голосов
/ 17 января 2011

Вот как это работает.Растровое изображение, которое вы выбираете в DC, - это растровое изображение, которое «нарисовано».Цитирование MSDN :

Прежде чем приложение сможет использовать контекст устройства памяти для операций рисования, оно должно выбрать точечный рисунок правильной ширины и высоты в контексте устройства.

...