首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >向WM_PAINT发送消息

向WM_PAINT发送消息
EN

Stack Overflow用户
提问于 2014-01-26 16:07:10
回答 1查看 2.1K关注 0票数 2

我正试图制作一个程序来控制一个用箭头键移动的盒子,我的code.Is有一个问题,可以通过SendMessage发送一条消息到WM_PAINT,在按左键的时候画一个新的矩形吗?以下是我的代码

代码语言:javascript
运行
复制
case WM_KEYDOWN:
    switch(wParam)
    {
       case VK_LEFT:                              //LEFT MOVEMENT


    SendMessage(hwnd,WM_PAINT,VK_LEFT,0);
        break;



       case VK_ESCAPE: 
           //FOR ENDING THE GAME WITH ESCAPE KEY
           SendMessage(hwnd,WM_DESTROY,VK_ESCAPE,0);
        break;
    }


case WM_PAINT:
    hdc=BeginPaint(hwnd,&ps);


      Rectangle(hdc,x,600,x1,700);
    if(wParam==VK_LEFT)
    { Rectangle(hdc,x-50,600,x1-50,700);

    }
    EndPaint(hwnd,&ps);
    return 0;
case WM_DESTROY:

    PostQuitMessage(0);
    return 0;
}
return DefWindowProc(hwnd,message,wParam,lParam);
}
where 

         x1=550;
          x=500

当按左键时,控件是否转到WM_PAINT

因为当我写信的时候

代码语言:javascript
运行
复制
if(wParam==VK_LEFT)
        { Rectangle(hdc,x-50,600,x1-50,700);

        }

什么事都没有发生,但当我写

代码语言:javascript
运行
复制
if(wParam==VK_ESCAPE)
    PostQuitMessage(0);
    return 0;

窗口使用转义键退出,这不是.I试图理解为什么VK_LEFT不执行的最后一段代码吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-26 16:10:07

你从来没派过WM_PAINT。该系统负责这方面的工作。相反,您可以调用InvalidateRect来指定希望重新绘制的矩形。系统将该矩形标记为无效,当下一个绘制周期发生时,该矩形将被重新绘制。

如果您想使更复杂的区域失效,就会有InvalidateRgn

如果您只是希望整个窗口失效,那么将NULL传递给InvalidateRectlpRect参数。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21365802

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档