• error C2360: ***的初始化操作由“case”标签跳过


    今天用VS2010学习GDI+编程时,在WM_PAINT消息处理时,提示如下错误:

    错误 2 error C2360: “hDCMem”的初始化操作由“case”标签跳过

    下面是错误处源代码:

    case WM_PAINT:
    hdc = BeginPaint(hWnd, &ps);
    // TODO: 在此添加任意绘图代码...
    HDC hDCMem = ::CreateCompatibleDC(hdc);
    HBITMAP hOldBmp = (HBITMAP)::SelectObject(hDCMem,hbmpBack);
    BITMAP bmp;
    ::GetObject(hbmpBack,sizeof(BITMAP),&bmp);
    ::BitBlt(hdc,0,0,bmp.bmWidth,bmp.bmHeight,hDCMem,0,0,SRCCOPY);
    ::SelectObject(hDCMem,hOldBmp);
    ::DeleteDC(hDCMem);
    EndPaint(hWnd, &ps);
    break;

    查了下网上,是说这个case语句可能没有被执行到(执行其他case了)导致变量没有初始化而导致接下来的错误,所以需要把变量放到switch前面声明初始化,如果你不想把初始化放在switch前面,还有一个解决方法,在swith中定义内部变量加括号,就可以了。

    修改后的代码:

    case WM_PAINT:
    {
    hdc = BeginPaint(hWnd, &ps);
    // TODO: 在此添加任意绘图代码...
    HDC hDCMem = ::CreateCompatibleDC(hdc);
    HBITMAP hOldBmp = (HBITMAP)::SelectObject(hDCMem,hbmpBack);
    BITMAP bmp;
    ::GetObject(hbmpBack,sizeof(BITMAP),&bmp);
    ::BitBlt(hdc,0,0,bmp.bmWidth,bmp.bmHeight,hDCMem,0,0,SRCCOPY);
    ::SelectObject(hDCMem,hOldBmp);
    ::DeleteDC(hDCMem);
    EndPaint(hWnd, &ps);
    break;
    }

    再编译就能成功运行。

  • 相关阅读:
    基本数据类型相互转换及操作方法
    python以及计算机原理基础简要摘录
    Linux程序包管理
    rpm命令详解
    Linux程序包管理
    Linux任务计划
    压缩,解压缩工具及bash脚本编程
    btrfs文件系统管理与应用
    LVM应用
    CSS核心技术
  • 原文地址:https://www.cnblogs.com/AlexanderZhao/p/12878996.html
Copyright © 2020-2023  润新知