qq_21955687 2015-06-15 17:02 采纳率: 0%
浏览 1618

按键响应只设置了一个,但是运行其他按键也能响应

static int n=10;
    switch(message)
    {
    case WM_CREATE:
        SetTimer(hwnd,9999,100,NULL);
        break;
    case WM_TIMER:
        if(wParam==9999)
            InvalidateRect(hwnd,NULL,0);
        break;
    case WM_SIZE:               //窗口尺寸发生变化时,应该刷新窗口
            InvalidateRect(hwnd,NULL,0);
    break;

    case WM_CHAR:/*按键设置*/
        if(wParam=='q')
        {
            i=1;
        }
        else if(wParam==VK_ESCAPE)
        {
            i=2;
        }
        else if(wParam=='3')
        {
            i=4;
        }
        /*战斗*/
        //向左
        else if(wParam='a')
        {
            n=021;
        }
        //向右
        else if(wParam='d')
        {
            n=011;
        }
        //攻击
        else if(wParam='j')
        {
             i=8;
        }

        InvalidateRect(hwnd,NULL,1);
        break;

    case WM_PAINT:
        hdc=BeginPaint(hwnd,&ps);
        if(i==0)
        {

        hMemDC=CreateCompatibleDC(hdc);
        hBitmap=LoadBitmap(hInst,MAKEINTRESOURCE(IDB_BITMAP1));
        SelectObject(hMemDC,hBitmap);
        GetObject(hBitmap,sizeof(BITMAP),&bitmap);
        GetClientRect(hwnd,&rect);
        StretchBlt(hdc,0,0,rect.right-rect.left,rect.bottom-rect.top,hMemDC,0,0,bitmap.bmWidth,bitmap.bmHeight,SRCCOPY);
        }

        if(i==1)
        {
            hMemDC2=CreateCompatibleDC(hdc);    
            hBitmap2=LoadBitmap(hInst,MAKEINTRESOURCE(IDB_BITMAP2));            
            SelectObject(hMemDC2,hBitmap2);
            GetObject(hBitmap2,sizeof(BITMAP),&bitmap2);
            StretchBlt(hdc,0,0,rect.right-rect.left,rect.bottom-rect.top,hMemDC2,0,0,bitmap2.bmWidth,bitmap2.bmHeight,SRCCOPY);
        }

        /*开始*/


        if(i==4)
        {
            hMemDC4=CreateCompatibleDC(hdc);    
            hBitmap4=LoadBitmap(hInst,MAKEINTRESOURCE(IDB_BITMAP4));            
            SelectObject(hMemDC4,hBitmap4);
            GetObject(hBitmap4,sizeof(BITMAP),&bitmap4);
            StretchBlt(hdc,0,0,rect.right-rect.left,rect.bottom-rect.top,hMemDC4,0,0,bitmap4.bmWidth,bitmap4.bmHeight,SRCCOPY);

//第一个人

switch(n)
{
case 10:
hMemDC10=CreateCompatibleDC(hdc);

hBitmap10=LoadBitmap(hInst,MAKEINTRESOURCE(n));

SelectObject(hMemDC10,hBitmap10);
GetObject(hBitmap10,sizeof(BITMAP),&bitmap10);
TransparentBlt(hdc,p1.x,rect.top+(rect.top+rect.bottom)/4,bitmap10.bmWidth, bitmap10.bmHeight,hMemDC10,0,0,bitmap10.bmWidth, bitmap10.bmHeight, RGB(255,255,255));//绘图。白色透明
break;

            case 11:
            p1.x=p1.x+(rect.right+rect.left)/16;

/*右*/ hMemDC11=CreateCompatibleDC(hdc);

hBitmap11=LoadBitmap(hInst,MAKEINTRESOURCE(n));

SelectObject(hMemDC11,hBitmap11);
GetObject(hBitmap11,sizeof(BITMAP),&bitmap11);
TransparentBlt(hdc,p1.x,rect.top+(rect.top+rect.bottom)/4,bitmap11.bmWidth, bitmap11.bmHeight,hMemDC11,0,0,bitmap11.bmWidth, bitmap11.bmHeight, RGB(255,255,255));//绘图。白色透明
n=20;
break;
case 20:
hMemDC20=CreateCompatibleDC(hdc);

hBitmap20=LoadBitmap(hInst,MAKEINTRESOURCE(n));

SelectObject(hMemDC20,hBitmap20);
GetObject(hBitmap20,sizeof(BITMAP),&bitmap20);
TransparentBlt(hdc,p1.x,rect.top+(rect.top+rect.bottom)/4,bitmap20.bmWidth, bitmap20.bmHeight,hMemDC20,0,0,bitmap20.bmWidth, bitmap20.bmHeight, RGB(255,255,255));//绘图。白色透明
n=10;
break;

            case 21:
            p1.x=p1.x-(rect.right+rect.left)/16;

/*左*/ hMemDC21=CreateCompatibleDC(hdc);

hBitmap21=LoadBitmap(hInst,MAKEINTRESOURCE(n));

SelectObject(hMemDC21,hBitmap21);
GetObject(hBitmap21,sizeof(BITMAP),&bitmap21);
TransparentBlt(hdc,p1.x,rect.top+(rect.top+rect.bottom)/4,bitmap11.bmWidth, bitmap21.bmHeight,hMemDC21,0,0,bitmap21.bmWidth, bitmap21.bmHeight, RGB(255,255,255));//绘图。白色透明
n=22;
break;
case 22:
hMemDC22=CreateCompatibleDC(hdc);

hBitmap22=LoadBitmap(hInst,MAKEINTRESOURCE(n));

SelectObject(hMemDC22,hBitmap22);
GetObject(hBitmap22,sizeof(BITMAP),&bitmap22);
TransparentBlt(hdc,p1.x,rect.top+(rect.top+rect.bottom)/4,bitmap22.bmWidth, bitmap22.bmHeight,hMemDC22,0,0,bitmap22.bmWidth, bitmap22.bmHeight, RGB(255,255,255));//绘图。白色透明
n=10;
break;

            }
    以上是部分代码,当我按下“a” “d”后位图消失(我做的效果应该是左移,右移),即使不按“a”“d” 按其他键也会造成同样的情况。
  • 写回答

4条回答 默认 最新

  • 纵横车 2015-06-15 17:40
    关注

    你看看当窗口尺寸变化,被遮挡后位图会不会消失。如果按什么键都有问题那可能是InvalidateRect()刷新窗口造成的,看看WM_PAINT里面有没有什么错误。

    评论

报告相同问题?

悬赏问题

  • ¥20 有偿:在ubuntu上安装arduino以及其常用库文件。
  • ¥15 请问用arcgis处理一些数据和图形,通常里面有一个根据点划泰森多边形的命令,直接划的弊端是只能执行一个完整的边界,但是我们有时候会用到需要在有很多边界内利用点来执行划泰森多边形的命令
  • ¥30 在wave2foam中执行setWaveField时遇到了如下的浮点异常问题,请问该如何解决呢?
  • ¥20 看图片)删除这个自动化录屏脚本就一直报错找不到脚本文件,如何解决?(相关搜索:bat文件)
  • ¥750 关于一道数论方面的问题,求解答!(关键词-数学方法)
  • ¥200 csgo2的viewmatrix值是否还有别的获取方式
  • ¥15 Stable Diffusion,用Ebsynth utility在视频选帧图重绘,第一步报错,蒙版和帧图没法生成,怎么处理啊
  • ¥15 请把下列每一行代码完整地读懂并注释出来
  • ¥15 pycharm运行main文件,显示没有conda环境
  • ¥15 寻找公式识别开发,自动识别整页文档、图像公式的软件