我正在使用win32函数
GetRegionData(...)
根据WM_paint消息提取组成无效绘制区域的精确矩形。
以下代码工作正常,第二次调用
GetRegionData
成功。
DWORD uRegionSize = GetRegionData(hRgn, sizeof(RGNDATA), NULL); // Send NULL request to get the storage size
RGNDATA* pData = (RGNDATA*)(new char[uRegionSize]); // Allocate space for the region data
pData->rdh.dwSize = uRegionSize;
DWORD uSizeCheck = GetRegionData(hRgn, uRegionSize, pData);
if (uSizeCheck != uRegionSize) {
// FAIL!
delete[] pData;
return;
}
...
do stuff with rectangles
...
但当我试图将数据缓冲区移动到堆栈上分配的成员变量时,
获取区域数据
每次返回0时失败。
在我的标题中:
char UpdateRegionData[LOTS_MORE_BYTES_THAN_NEEDED];
在我的cpp中:
DWORD uRegionSize = GetRegionData(hRgn, sizeof(RGNDATA), NULL); // Send NULL request to get the storage size
RGNDATA* pData2 = (RGNDATA*)UpdateRegionData;
pData2->rdh.dwSize = uRegionSize;
DWORD uSizeCheck = GetRegionData(hRgn, uRegionSize, pData2);
if (uSizeCheck != uRegionSize) {
// FAIL!
return;
}
两个版本之间唯一不同的是内存分配,但是第二个版本失败了。
GetLastError()
返回代码183,这是一个已经存在的错误,似乎没有什么意义。