02. 绘图消息和键盘消息

一. 绘图消息WM_PAINT

WM_PAINT消息出现时机:

1.窗口创建

2.窗口尺寸改变

3.最大最小化

4.从隐藏到显示

5.从屏幕外到屏幕内

 

窗口对象中保存了无效区,如果存在无效区,系统就会一直发送WM_PAINT消息。BeginPaint会清掉无效区,GetDC则不会。

系统没发送WM_PAINT消息时,程序员想自己手动绘图,可采用:

  1. InvalidateRect。手动产生无效区,无效区域将累积在更新区域中,直到下一条WM_PAINT消息出现时对该区域进行处理,或者直到使用调用ValidateRect或ValidateRgn函数。
  2. GetDC,ReleaseDC。

 

GetDC和BeginPaint区别:

1.BeginPaint会清掉无效区,GetDC则不会。

2.BeginPaint只绘制无效区部分,没有无效区则不绘制。

3.BeginPaint只能在WM_PAINT消息中使用

4.GetDC无视无效区

简记:BeginPaint只在WM_PAINT消息中使用,GetDC在其他情况中使用

 

二. 键盘消息

WM_KEYDOWN和WM_CHAR不能区分大小写,WM_CHAR可区分大小写,但要在消息循环中调用TranslateMessage。TranslateMessage的作用是把键盘的虚拟键消息转为WM_CHAR消息。

设置UNICODE宏之后,WM_CHAR消息中可以方便地区分中文。

 

case WM_CHAR: {
        TCHAR szBuff[MAXBYTE] = {};
        wsprintf(szBuff, TEXT("[WinApi] WM_CHAR %c"), wParam);//每个汉字触发一次消息
        OutputDebugString(szBuff);
        return 0;
    }

  

posted @ 2020-06-24 10:51  八转达人  阅读(152)  评论(0编辑  收藏  举报