这个问题真奇怪!请教高手,谢谢!

whhif 2002-07-01 09:18:25
我要做一个非矩形窗口.
所以我做了一个位图转区域的一个函数。
是HRGN BitmapToRgn(HBITMAP bitmap);
这个函数在我的SDK程序中没有问题。

但当我用MFC类库的时候,有个问题。
我用的是:
HRGN BitmapToRgn(HBITMAP bitmap)
{
CRgn rgn;
........
........
........
rgn.m_hObject=CreatePolygonRgn(....);//以上在sdk程序中均没有问题。
........
........
return (HRGN)rgn.m_hObject;
}
但返回的区域句柄无效,不知为何。
还有当我把CRgn rgn改成static Crgn rgn时一切正常。
即:
HRGN BitmapToRgn(HBITMAP bitmap)
{
static CRgn rgn;
........
........
........
rgn.m_hObject=CreatePolygonRgn(....);//以上在sdk程序中均没有问题。
........
........
return (HRGN)rgn.m_hObject;
}
HRGN BitmapToRgn(HBITMAP bitmap)
{
CRgn rgn;
........
........
........
rgn.m_hObject=CreatePolygonRgn(....);//以上在sdk程序中均没有问题。
........
........
return (HRGN)rgn.m_hObject;
}
这是为何,请教高手。






...全文
56 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
boxban 2002-07-01
  • 打赏
  • 举报
回复
HRGN BitmapToRgn(HBITMAP bitmap)
{
CRgn rgn;//这是一个自动变量,在堆栈上分配
........
........
........
rgn.m_hObject=CreatePolygonRgn(....);//以上在sdk程序中均没有问题。
........
........

return (HRGN)rgn.m_hObject; //推出时,自动变量rgn被销毁,连同他的数据成员。

}

解决办法:
HRGN BitmapToRgn(HBITMAP bitmap)
{
CRgn rgn;
HGDIOBJ handle;//**********
........
........
........
rgn.m_hObject=CreatePolygonRgn
........
........
//new-lines **********
handle = rgn.Detach();
ASSERT(handle);
return (HRGN)handle;
}

70,034

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧