为什么删除的变量又出现了,这是为什么?而且不会出错 -0 - 不明白!跪求高手解疑惑。

LRESULT CALLBACK WndProc (HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
{
static HRGN hRgnClip ; //创建hRgnClip 我想问的问题。
static int cxClient, cyClient ;
double fAngle, fRadius ; //角度,半径
HCURSOR hCursor ; //光标句柄
HDC hdc ;
HRGN hRgnTemp[6] ; //范围
int i ;
PAINTSTRUCT ps ; //绘图结构。

switch (iMsg)
{
case WM_SIZE:
cxClient = LOWORD (lParam) ; //客户区长
cyClient = HIWORD (lParam) ; //客户区高

hCursor = SetCursor (LoadCursor (NULL, IDC_WAIT)) ; //
// 函数功能:该函数确定光标的形状。

ShowCursor (TRUE) ;//该函数显示或隐藏光标。

if (hRgnClip) //为什么这么做呢?
DeleteObject (hRgnClip) ; //hRgnClip 到这怎么就把他给删除了?连初始化都没做,也没用到这个变量,就把他删除,为什么要创建。

hRgnTemp[0] = CreateEllipticRgn (0, cyClient / 3, cxClient / 2, 2 * cyClient / 3) ;
//创建一个椭圆

hRgnTemp[1] = CreateEllipticRgn (cxClient / 2, cyClient / 3, cxClient, 2 * cyClient / 3) ;
hRgnTemp[2] = CreateEllipticRgn (cxClient / 3, 0, 2 * cxClient / 3, cyClient / 2) ;
hRgnTemp[3] = CreateEllipticRgn (cxClient / 3, cyClient / 2, 2 * cxClient / 3, cyClient) ;
hRgnTemp[4] = CreateRectRgn (0, 0, 1, 1) ;
hRgnTemp[5] = CreateRectRgn (0, 0, 1, 1) ;
hRgnClip = CreateRectRgn (0, 0, 1, 1) ; // 

烙印99
浏览 192回答 2
2回答

慕神8447489

if (hRgnClip) // 检查是否已存在矩形句柄, 是的话将它删除DeleteObject (hRgnClip) ;hRgnClip = CreateRectRgn (0, 0, 1, 1) ; // 这里只是创建了矩形并返回了矩形句柄 交给了hRgnClip 管理

holdtom

当窗口第一次创建时就会发出 WM_SIZE消息  if (hRgnClip) //  这时候 hRgnClip还未存在                DeleteObject (hRgnClip) ;   hRgnClip    = CreateRectRgn (0, 0, 1, 1) ; // 当运行到这时, hRgnClip就被第一次初始化了   所以第一次创建时候  hRgnClip     就存在了
打开App,查看更多内容
随时随地看视频慕课网APP