【问题标题】:What does SelectObject(dc, hBMP) do?SelectObject(dc, hBMP) 有什么作用?
【发布时间】:2011-06-10 04:32:18
【问题描述】:

我想我确实明白如果我在“设备连接”中选择“一个对象”会发生什么,并且如果这个对象是 brushfontpen:这些对象的特征因此被用于在设备上下文上绘图。

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

我有一个程序可以做

HDC dc = ::GetDC(hWnd);

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

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

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

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

变量ffBitmap在整个程序中没有被引用,但是,如果我不选择对象(ffBitmap),什么都不会被绘制,所以这是必要的。

如果有人能阐明这里发生的事情,我将不胜感激。

【问题讨论】:

  • 把它想象成一个橡皮图章。由 SelectObject 创建,与 BitBlt 一起应用。额外的间接性很重要。

标签: winapi gdi


【解决方案1】:

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

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

【讨论】:

  • 为什么我们不能只用CreateCompatibleBitmap 创建一个位图,然后将ffMemoryDc 作为第一个参数传递进去?
猜你喜欢
  • 1970-01-01
  • 2012-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-07
  • 2012-09-20
  • 2023-03-23
  • 2011-04-07
相关资源
最近更新 更多