zoukankan      html  css  js  c++  java
  • 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;
    }

    再编译就能成功运行。

  • 相关阅读:
    Mac快捷键符号解释及用法介绍
    Mac使用小技巧:Fn键的妙用技巧
    Mac快捷键大全
    idea 开发SpringBoot项目并打包docker镜像部署到节点上
    .netcore linux开机自启脚本
    javascript Event Loop
    mysql函数使用技巧
    MySql查找慢查询sql
    js优先队列和链表
    mysql性能优化
  • 原文地址:https://www.cnblogs.com/AlexanderZhao/p/12878996.html
Copyright © 2011-2022 走看看