SelectObject(dc,hBMP)有什么作用?

时间:2011-01-17 00:14:48

标签: winapi gdi

我想我确实理解如果我将“对象”选择到“设备竞争”中会发生什么,并且如果此对象是画笔字体 pen :因此,这些对象的特征用于绘制到设备上下文中。

但是,我不明白在设备上下文中选择位图后会发生什么,更不用说为什么有必要这样做了。

我有一个程序,但有些人

HDC dc = ::GetDC(hWnd);

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

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

然后绘制到 ffMemoryDc 然后* BitBlt * s ffMemoyDc进入 真实窗口的设备上下文。

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

变量 ffBitmap 在整个程序中没有被引用,但是,如果我没有SelectObject(ffBitmap),则不会绘制任何内容,因此 是必需的。

如果有人可以了解这里发生的事情,我会很感激。

1 个答案:

答案 0 :(得分:3)

这就是它的工作原理。您在DC中选择的位图是“绘制在上面”的位图。引用MSDN

  

在应用程序可以使用内存设备上下文进行绘图操作之前,它必须在设备上下文中选择正确宽度和高度的位图。