问题描述
- 按键响应只设置了一个,但是运行其他按键也能响应
-
static int n=10; switch(message) { case WM_CREATE: SetTimer(hwnd9999100NULL); break; case WM_TIMER: if(wParam==9999) InvalidateRect(hwndNULL0); break; case WM_SIZE: //窗口尺寸发生变化时,应该刷新窗口 InvalidateRect(hwndNULL0); 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(hwndNULL1); break; case WM_PAINT: hdc=BeginPaint(hwnd&ps); if(i==0) { hMemDC=CreateCompatibleDC(hdc); hBitmap=LoadBitmap(hInstMAKEINTRESOURCE(IDB_BITMAP1)); SelectObject(hMemDChBitmap); GetObject(hBitmapsizeof(BITMAP)&bitmap); GetClientRect(hwnd&rect); StretchBlt(hdc00rect.right-rect.leftrect.bottom-rect.tophMemDC00bitmap.bmWidthbitmap.bmHeightSRCCOPY); } if(i==1) { hMemDC2=CreateCompatibleDC(hdc); hBitmap2=LoadBitmap(hInstMAKEINTRESOURCE(IDB_BITMAP2)); SelectObject(hMemDC2hBitmap2); GetObject(hBitmap2sizeof(BITMAP)&bitmap2); StretchBlt(hdc00rect.right-rect.leftrect.bottom-rect.tophMemDC200bitmap2.bmWidthbitmap2.bmHeightSRCCOPY); } /*开始*/ if(i==4) { hMemDC4=CreateCompatibleDC(hdc); hBitmap4=LoadBitmap(hInstMAKEINTRESOURCE(IDB_BITMAP4)); SelectObject(hMemDC4hBitmap4); GetObject(hBitmap4sizeof(BITMAP)&bitmap4); StretchBlt(hdc00rect.right-rect.leftrect.bottom-rect.tophMemDC400bitmap4.bmWidthbitmap4.bmHeightSRCCOPY);
//第一个人
switch(n)
{
case 10:
hMemDC10=CreateCompatibleDC(hdc);hBitmap10=LoadBitmap(hInstMAKEINTRESOURCE(n));
SelectObject(hMemDC10hBitmap10);
GetObject(hBitmap10sizeof(BITMAP)&bitmap10);
TransparentBlt(hdcp1.xrect.top+(rect.top+rect.bottom)/4bitmap10.bmWidth bitmap10.bmHeighthMemDC1000bitmap10.bmWidth bitmap10.bmHeight RGB(255255255));//绘图。白色透明
break;case 11: p1.x=p1.x+(rect.right+rect.left)/16;
/*右*/ hMemDC11=CreateCompatibleDC(hdc);
hBitmap11=LoadBitmap(hInstMAKEINTRESOURCE(n));
SelectObject(hMemDC11hBitmap11);
GetObject(hBitmap11sizeof(BITMAP)&bitmap11);
TransparentBlt(hdcp1.xrect.top+(rect.top+rect.bottom)/4bitmap11.bmWidth bitmap11.bmHeighthMemDC1100bitmap11.bmWidth bitmap11.bmHeight RGB(255255255));//绘图。白色透明
n=20;
break;
case 20:
hMemDC20=CreateCompatibleDC(hdc);hBitmap20=LoadBitmap(hInstMAKEINTRESOURCE(n));
SelectObject(hMemDC20hBitmap20);
GetObject(hBitmap20sizeof(BITMAP)&bitmap20);
TransparentBlt(hdcp1.xrect.top+(rect.top+rect.bottom)/4bitmap20.bmWidth bitmap20.bmHeighthMemDC2000bitmap20.bmWidth bitmap20.bmHeight RGB(255255255));//绘图。白色透明
n=10;
break;case 21: p1.x=p1.x-(rect.right+rect.left)/16;
/*左*/ hMemDC21=CreateCompatibleDC(hdc);
hBitmap21=LoadBitmap(hInstMAKEINTRESOURCE(n));
SelectObject(hMemDC21hBitmap21);
GetObject(hBitmap21sizeof(BITMAP)&bitmap21);
TransparentBlt(hdcp1.xrect.top+(rect.top+rect.bottom)/4bitmap11.bmWidth bitmap21.bmHeighthMemDC2100bitmap21.bmWidth bitmap21.bmHeight RGB(255255255));//绘图。白色透明
n=22;
break;
case 22:
hMemDC22=CreateCompatibleDC(hdc);hBitmap22=LoadBitmap(hInstMAKEINTRESOURCE(n));
SelectObject(hMemDC22hBitmap22);
GetObject(hBitmap22sizeof(BITMAP)&bitmap22);
TransparentBlt(hdcp1.xrect.top+(rect.top+rect.bottom)/4bitmap22.bmWidth bitmap22.bmHeighthMemDC2200bitmap22.bmWidth bitmap22.bmHeight RGB(255255255));//绘图。白色透明
n=10;
break;} 以上是部分代码,当我按下“a” “d”后位图消失(我做的效果应该是左移,右移),即使不按“a”“d” 按其他键也会造成同样的情况。
解决方案
你看看当窗口尺寸变化,被遮挡后位图会不会消失。如果按什么键都有问题那可能是InvalidateRect()刷新窗口造成的,看看WM_PAINT里面有没有什么错误。
解决方案二:
在WM_PAINT 里面只有一个InvalidateRect()
Sleep(1000); j=j-1; InvalidateRect(hwndNULL1); EndPaint(hwnd&ps);
解决方案三:
建议单步跟踪一下,看一下执行的代码是不是自己设想的
怀疑有代码弄错位置
解决方案四:
WM_CHAR里面有InvalidateRect(hwndNULL1);
就是说无论你按什么按键都会刷新界面,不知道你所说的是不是这个问题。
如果是这样,你在最后一个if后面加上else{ return; }