【发布时间】:2018-06-12 14:43:14
【问题描述】:
我目前正在使用 Petzold 的书(第 5 版)回到一些 Windows 编程。 我使用 BitBlt 编译了following example,但它没有按预期工作。
它应该复制(CxSource,CySource)大小的窗口图标并将其复制到整个窗口的表面上。 实际上,使用 Windows 7 会发生什么情况是窗口下方的位图被获取并复制到绘图表面,即 hdcClient。
知道传递给 BitBlt 的 DC 很明显是 hdcWindow,我不明白它为什么会这样,它指的是通过当前应用程序的 GetWindowDC(hwnd) 获得的设备上下文。
我首先认为这是由于默认情况下启用了透明模式,但禁用它并不会改变任何内容。 BitBlt 似乎总是在应用程序窗口下方出现! 我不明白! :) 任何人都知道它为什么会这样工作以及如何解决它?
【问题讨论】:
-
GetWindowDC 应该仍然可以工作,因为它是 Win32 API (user32.lib) 的一部分。
-
请不要发布外部链接。在您的问题中插入代码。
-
嗯 ... e̶a̶t̶i̶n̶g̶ 删除我以前的 cmets。也许我需要看到这个结果。听起来好像
cxSource和cySource指向窗口的错误部分。仍然有可能“框架厚度 + 默认大小”不再是获取窗口图标的可靠方法,但是 MSDN 上似乎没有提到这种方法或替代方法。 -
@BarmakShemirani:关于非链接,我一般同意你的看法,但在这种特殊情况下,提到专门为 Petzold 书创建的带有代码示例的 github 页面对我来说看起来完全没问题。
-
@BarmakShemirani 对我来说,从 Petzold 的 SO 书籍中发布源代码是否可以被视为“合理使用”,正如他在 FAQ 中所写的那样,这还不是很清楚。所以安全总比后悔好。