首页 > 代码库 > Win32 Windows编程 六

Win32 Windows编程 六

WM_PAINT消息

1 WM_PAINT 由于窗口的互相覆盖等,产生需要绘制的区域, 那么会产生WM_PAINT消息。一般情况下,不直接发送WM_PAINT消息,通过API声明需要绘制区域来产生

WM_PAINT消息

例如可以使用 InvalidateRect 声明一个需要重新绘制的区域

BOOL InvalidateRect(
  HWND hWnd,           // handle to window
  CONST RECT* lpRect,  // rectangle coordinates
  BOOL bErase          // erase state
);
2 WM_PAINT 的注意点
2.1 如果一个消息队列中 有多个WM_PAINT消息,只有最后一个消息有作用
2.2 WM_PAINT消息处理中,要清空需要被绘制的区域。BeginPaint
3 WM_PAINT 的使用
3.1 WM_PAINT开始时 必须调用BeginPaint
3.2 WM_PAINT结束时 必须调用EndPaint

键盘消息

1 键盘消息

按键消息

WM_KEYDOWN 当键被按下时产生

WM_KEYUP 当键被释放时产生

WM_SYSKEYDOWN     (ALT/F10) 当系统键被按下时产生

WM_SYSKEYUP当系统键释放时产生

字符消息

WM_CHAR  当有字符键被按下时产生 

TranslateMessage会将WM_KEYDOWN消息中 可以显示的按键 转换成WM_CHAR的消息

2 消息参数

WPARAM - 虚拟键码

LPARAM  - 相关的按键信息

3 消息的使用

3.1 当有按键消息时,首先进入系统消息队列 然后被程序的消息循环获取 

3.2 消息的处理

4 键盘消息的顺序

对于可显示字符:WM_KEYDOWN WM_CHAR WM_KEYUP

对于不可显示字符: WM_KEYDOWN WM_KEYUP

对于系统键: WM_SYSKEYDOWN WM_KEYUP

如果按键一直不释放,会重复产生

WM_KEYDOWN(WM_KEYCHAR)