首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

DeleteObject的一点有关问题

2013-01-17 
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应该只是删除了句柄关联的资源,而句柄本身还是存在的,只是这个句柄不再关联对象,不能再拿来使用了,但是这个变量本身是没有改变的,所以他的值还是原来的值,只不过这个值不能再用,一用就出错。。变量还是变量,重新给它赋值当然没问题

热点排行