【发布时间】:2015-01-05 01:57:04
【问题描述】:
(这个问题是在使用 g++ 编译器的 Win32API 上下文中提出的)。 我很难理解为什么以下代码行不起作用
wndclass.hbrBackground = GetStockObject(WHITE_BRUSH);
wndclass 是 WNDCLASSEX 结构的一个实例,Windows API 明确规定 其成员 hbrBackground 的类型是 HBRUSH。此外,HBRUSH 只是 HANDLE 的 typedef,而 HANDLE 又是 void* 的 typedef。因此,HBRUSH 应该是 void* 类型。 现在,GetStockObject 函数的返回类型是 HGDIOBJ,它也被定义为 HANDLE,因此是 void*。
Windows 数据类型 http://msdn.microsoft.com/en-us/library/windows/desktop/aa383751(v=vs.85).aspx
GetStockObject http://msdn.microsoft.com/en-us/library/dd144925(v=vs.85).aspx
WNDCLASSEX http://msdn.microsoft.com/en-us/library/windows/desktop/ms633577(v=vs.85).aspx
为什么编译时会出现以下错误:
invalid conversion from 'HGDIOBJ {aka void*}' to 'HBRUSH' [-fpermissive]
如果我从 GetStockObject 显式转换返回的值,它会起作用
wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
感谢您的帮助。
【问题讨论】: