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

问题描述

按键响应只设置了一个,但是运行其他按键也能响应
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; }

时间: 2024-09-29 18:57:38

wparam-按键响应只设置了一个,但是运行其他按键也能响应的相关文章

android alerdialog-我设置了一个AlertDialog,他又两个按钮,但是为什么只显示cancel呢,部分代码如下

问题描述 我设置了一个AlertDialog,他又两个按钮,但是为什么只显示cancel呢,部分代码如下 我设置了一个AlertDialog,他又两个按钮,但是为什么只显示cancel呢,部分代码如下 解决方案 方法用错了,两个按钮都是positive 解决方案二: 有个negative 解决方案三: dialog上面的按钮有三种,积极的消极的和中立的,其实都是新建一个按钮,不过同一种按钮如果设置多次,后面的会把前面的覆盖掉. 还有,你的toast忘了show()了 解决方案四: 哈哈.方法名一

路由器按键恢复出厂设置,页面如果监听操作

问题描述 路由器按键恢复出厂设置,页面如果监听操作 公司是做路由器产品的,前台是js+html,后台是C语言,现在通过路由器的按键恢复出厂设置,正常情况下,前台对应的要清除所有的浏览器缓存,但是前台没办法监听到设备上面的按键请求,请问应该怎么做呢? 解决方案 这是没有办法的,你不能控制浏览器.再说浏览器应该自己去重新连接. 解决方案二: 一般pc服务器可以计时器定时+ajax访问网站获取状态 路由器内置web不清楚,应该也支持吧,前端ui用ajax定时访问路由器获取状态什么的 解决方案三: 路由

mfc-MFC程序运行后按键响应的问题

问题描述 MFC程序运行后按键响应的问题 写的是一个类似视频播放功能的程序(现在写的这段只要具备这个功能,后期还要加上图像处理,暂且就当是个播放器吧) 按下start后,读入视频,是使用opencv的,在按键响应的代码块里,代码如下: std::string videoFile = "d:/123.mp4"; cv::VideoCapture capture; capture.open(videoFile); if (!capture.isOpened()){ MessageBox(&

opengl-一个雪人程序,但是雪人无法显示出来,只弹出一个黑框,咋改呢?

问题描述 一个雪人程序,但是雪人无法显示出来,只弹出一个黑框,咋改呢? #include //旋转参数 static GLfloat xRot = 180; static GLfloat yRot = 180; void doMyInit() { glClearColor(0.0, 0.0, 0.0, 0.0); // Set the clear color to black // Specify the boundaries of the viewing window glMatrixMode

移动开发-overridePendingTransition只设置进入动画

问题描述 overridePendingTransition只设置进入动画 以前跳转都用这个方法,进入和退出的activity都有动画效果. 但是现在遇到一个场景是,只需要进入activity的效果,不需要退出的activity动画效果, 试过了把第二个参数设为0,也试过把第二个动画的duration设置为0.1.10000, 甚至是fromXDelta="0%p" ,toXDelta="0%p"这样设置,也都不是我想要的效果. 是不是我方向错了,或者有别的跳转方法

明明只建立了一个线程类,为何进行时这么卡,而且没有转头效果

问题描述 明明只建立了一个线程类,为何进行时这么卡,而且没有转头效果 这是GameUtil里的 public static void addFishes(ArrayList<Fish> Fishes){ int count=rand.nextInt(6)+5; for(int i=0;i<count;i++){ Fish f=new Fish(); f.setState(State_Swin); f.setLevel(rand.nextInt(11)+1); f.setDrawCount

css-html 元素只设置padding 宽高区域不是预期效果

问题描述 html 元素只设置padding 宽高区域不是预期效果 如下的一个HTML文档: <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>无标题文档</title> <style> a { background-co

编程-在数据库中设置了一个flag=h表示头条,但是如果数据库中有多个h呢

问题描述 在数据库中设置了一个flag=h表示头条,但是如果数据库中有多个h呢 在数据库中设置了一个flag=h表示头条,但是如果数据库中有多个h呢,要怎么把多余的h干掉页面上只显示一条头条 解决方案 根据需要,要么你可以显示多个头条,要么按照设置时间排序,取最后设置的那条.(增加一个设置时间的字段) 解决方案二: 1.按照时间倒序取第一条flag=h的数据: 2.在设置头条的时候,将其它所有的flag=h都去掉,保证任何时候都只会有最多一条数据有flag=h. 这两种方式都可. 解决方案三:

ASP.NET查询页面设置form的action属性只弹出一个页面,并且每次将页面设置到最前

原文:ASP.NET查询页面设置form的action属性只弹出一个页面,并且每次将页面设置到最前 背景 当数据量大.查询条件复杂,多样多的时候,我们可能需要单独做一个查询界面,当用户选择设置了相关的查询条件后,点击[查询]按钮,系统就弹出一个新的页面展示出根据条件查询出的数据集. 然后,用户每点[查询]按钮就弹出一个新的页面展示出最新的查询结果. 当然,在较好的用户体验下,我认为不管用户点击了多少次[查询]按钮,系统应该只弹出并有且只有一个页面,这个页面就是展示查询结果的页面了.并且这页面还应