MSDN显示CreatePatternBrush的以下内容:
您可以使用DeleteObject函数删除图案画刷,而不会影响相关位图。 因此,您可以使用此位图创建任意数量的图案画刷。
我的问题与之相反。 如果HBRUSH存活时间很长,我能否在创建画刷后立即删除HBITMAP? 即:HBRUSH是否存储其自己的HBITMAP副本?
在这种情况下,我希望HBRUSH具有对象范围,而HBITMAP将具有方法范围(创建HBRUSH的方法)。
HBRUSH和HBITMAP是完全独立的。这些句柄可以彼此完全独立地删除,一旦创建,对任何对象的更改都不会影响另一个对象。
我认为位图必须比画刷存在更久:画刷只是引用现有的位图而非复制它。
你可以尝试一下,看看会发生什么。
我怀疑CreatePatternBrush() API是否会复制您提供的位图,因为HBITMAP是:
Win32和GDI倾向于保守地创建您数据的内部副本,仅因为它们的大多数API是在更加有限的内存和GDI句柄供应情况下创建的(例如,CreatePatternBrush()的日期可以追溯到Windows 95,许多功能甚至更早),而现在这些资源已经不再那么有限。(例如,Windows 95需要在只有4MB RAM的系统上运行良好。)