jjzjj

c++ - tr1::unique_ptr 和 SelectObject()

我有一些像这样管理异常安全的原始代码:voidfoo(){HDChdc=//getanHDCHBITMAPhbitmap=//getanHBITMAPHGDIOBJhbitmapOld=SelectObject(hdc,hbitmap);try{//dosomethingthatmaythrowanexception}catch(...){SelectObject(hdc,hbitmapOld);throw;}}现在我想摆脱tryblock并使用unique_ptr自动选择旧位图。所以我写了这样的东西:voidfoo(){//...//HGDIOBJisdefinedasvoid*st

c++ - 从 HGDIOBJ 到 HBRUSH 的转换

(此问题是在使用g++编译器的Win32API上下文中提出的)。我无法理解为什么以下代码行不起作用wndclass.hbrBackground=GetStockObject(WHITE_BRUSH);wndclass是WNDCLASSEX结构的实例,WindowsAPI明确规定它的成员hbrBackground的类型是HBRUSH。此外,HBRUSH只是HANDLE的类型定义,而HANDLE又是void*的类型定义。因此,HBRUSH应该是void*类型。现在,GetStockObject函数的返回类型是HGDIOBJ,它也被类型定义为HANDLE,因此是void*。Windows数据