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

Ren*_*ger 8 winapi gdi

我想我确实理解如果我将"一个对象"选择到"设备事件"中会发生什么,并且如果这个对象是画笔,字体,:这些对象的特征因此用于绘制到设备上下文中.

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

我有一个程序,有些人做了

HDC dc = ::GetDC(hWnd);

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

hOldBitmap          = (HBITMAP) ::SelectObject(ffMemoryDc, ffBitmap);
Run Code Online (Sandbox Code Playgroud)

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

BitBlt ( dc, 
         0, 0, windowWidth, windowHeight,
         ffMemoryDc,
         0, 0,
         SRCCOPY
       );
Run Code Online (Sandbox Code Playgroud)

变量ffBitmap在整个程序中没有其他地方引用,但是,如果我不选择SelectObject(ffBitmap),则不会绘制任何内容,因此这是必要的.

如果有人能说清楚这里发生的事情,我会很感激.

jpa*_*cek 4

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

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