DeleteObject的一点有关问题
DeleteObject的一点问题LRESULT CALLBACK MyWindowProc(HWND hwnd,// handle to windowUINT uMsg,// messa
DeleteObject的一点问题
LRESULT CALLBACK MyWindowProc(
HWND hwnd, // handle to window
UINT uMsg, // message identifier
WPARAM wParam, // first message parameter
LPARAM lParam // second message parameter
)
{
static HRGN hRgnClip; //静态矩形区域对象
switch(uMsg)
{
case WM_SIZE:
//省略若干代码。。。
if(hRgnClip)
DeleteObject(hRgnClip);
hRgnClip = CreateRectRgn(0,0,1,1);
//省略后续代码。。。
case WM_PAINT:
SelectClipRgn(hdc,hRgnClip);
}
在程序第一次运行时hRgnClip为0x00000000于是不执行DeleteObject
成功运行之后手动改变窗口SIZE触发WM_SIZE,此时hRgnClip不为0,执行DeleteObject
可是执行完后hRfnClip的值还是没变,DeleteObject的作用不是释放为static HRGN hRgnClip分配的内存吗?按道理释放了内存之后,再对hRgnClip进行赋值操作
hRgnClip = CreateRectRgn(0,0,1,1);应该是非法的吧,但是实际运行并未出错。
难道DeletObject并未释放内存吗?
[解决办法]DeleteObject应该只是删除了句柄关联的资源,而句柄本身还是存在的,只是这个句柄不再关联对象,不能再拿来使用了,但是这个变量本身是没有改变的,所以他的值还是原来的值,只不过这个值不能再用,一用就出错。。变量还是变量,重新给它赋值当然没问题