error C2360: initialization of 'hPen' is skipped by 'case' label的解决方法

在写一个绘制正弦曲线的windows程序时,遇到这个问题。

程序代码如下:

LRESULT __stdcall WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)

{

#define SEGMENTS 500  // 取的点数(在一个周期内取500个点)

#define PI 3.1415926  // 圆周率

 

    HDC hdc;

    PAINTSTRUCT ps;

    RECT rt;

    int cxClient, cyClient;

    POINT pt[SEGMENTS];

    int i;

   

    switch(message)

    {

    case WM_PAINT:

        hdc = ::BeginPaint(hWnd, &ps);

        ::GetClientRect(hWnd, &rt);

        cxClient = rt.right - rt.left;

        cyClient = rt.bottom - rt.top;

 HPEN hPen = ::CreatePen(PS_SOLID, 3, RGB(255, 0, 0));

 HPEN hOldPen = (HPEN)::SelectObject(hdc, hPen);

        // 画横坐标轴

        ::MoveToEx(hdc, 0, cyClient/2, NULL);

        ::LineTo(hdc, cxClient, cyClient/2);

        // 找出500个点的坐标

        for(i=0; i<SEGMENTS; i++)

        {

            pt[i].x = cxClient*i/SEGMENTS;

            pt[i].y = (int)((cyClient/2)*(1 - sin(2*PI*i/SEGMENTS)));

        }

        // 将各点连在一起

        ::Polyline(hdc, pt, SEGMENTS);

        ::EndPaint(hWnd, &ps);

        break;

    case WM_DESTROY:

        ::PostQuitMessage(0);

        break;

    }

    return ::DefWindowProc(hWnd, message, wParam, lParam);

}

运行程序出现如下错误:

D:/VC/MyProjects/Windows程序设计/配书代码/04SineWave/SineWave.cpp(100) : error C2360: initialization of 'hOldPen' is skipped by 'case' label

        D:/VC/MyProjects/Windows程序设计/配书代码/04SineWave/SineWave.cpp(85) : see declaration of 'hOldPen'

D:/VC/MyProjects/Windows程序设计/配书代码/04SineWave/SineWave.cpp(100) : error C2360: initialization of 'hPen' is skipped by 'case' label

        D:/VC/MyProjects/Windows程序设计/配书代码/04SineWave/SineWave.cpp(84) : see declaration of 'hPen'

原因是:

HPEN hPen; HPEN hOldPen;声明在case下面编译器会认为不安全, 因为case不是每次都会执行到。

解决方法:

1、  可以将HPEN hPen; HPEN hOldPen;switch case的前面声明,然后在里面定义。

2、  或者在case语句的后面加上大括号{}将所有语句括起来,如下:

switch(message)

    {

    case WM_PAINT:

        {

hdc = ::BeginPaint(hWnd, &ps);

……

HPEN hPen = ::CreatePen(PS_SOLID, 3, RGB(255, 0, 0));

HPEN hOldPen = (HPEN)::SelectObject(hdc, hPen);

            ……

          break;

  }

    case WM_DESTROY:

        ::PostQuitMessage(0);

        break;

    }

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值