默认列表视图消息处理

本节列出了列表视图控件执行的窗口消息处理。

消息处理

下表描述了列表视图控件执行的窗口消息处理。

Message 已执行的处理
WM_CHAR 搜索以指定字符开头的列表视图项目,如果找到该项目,则选择并将焦点设置为该项目。 在超时间隔(目前固定为一秒)内收到的多个字符会被连接起来,而列表视图控件会搜索以结果字符串开头的项目。
WM_COMMAND 处理 EN_UPDATEEN_KILLFOCUS 通知代码,并将所有其他编辑控件通知转发给父窗口。
WM_CREATE 执行 WM_NCCREATE 之外的初始化。 如果未指定 LVS_SHAREIMAGELISTS 窗口样式,则列表视图控件将在此时创建图标和小图标图像列表。
WM_DESTROY 释放 WM_CREATE 过程中分配的资源。
WM_ERASEBKGND 使用列表视图控件的当前背景颜色擦除窗口背景。 如果背景颜色为 CLR_NONE 值,则列表视图控件会将消息转发给父窗口。
WM_GETDLGCODE 返回 DLGC_WANTTAB 和 DLGC_WANTARROWS 值的组合。
WM_GETFONT 返回当前标签字体的句柄。
WM_HSCROLL 水平滚动列表视图控件。
WM_KEYDOWN 处理 SPACEBAR、ENTER 和箭头键,并向父窗口发送 LVN_KEYDOWN 通知代码。
WM_KILLFOCUS 重新绘制被聚焦的列表项目(如有),并向父窗口发送 NM_KILLFOCUS 通知代码。
WM_LBUTTONDBLCLK 向父窗口发送 NM_DBLCLK(列表视图)通知代码。
WM_LBUTTONDOWN 根据启动的是单击还是拖动操作,以不同方式进行处理。 为了确定涉及哪项操作,列表视图控件会进入一个模式消息循环,直到按钮被释放或鼠标被移动。 在单击的情况下,列表视图控件可能会根据光标位置、SHIFT 键和 CTRL 键的状态等来更改哪个项目具有焦点和哪个项目被选中。 然后,列表视图控件会向其父窗口发送 NM_CLICK(列表视图) 通知代码。
如果拖动是从一个项目开始,则列表视图控件会选择并将焦点设置为该项目。 然后向父窗口发送 LVN_BEGINDRAG 通知代码。 父窗口负责实际执行拖动操作。
如果拖动是从窗口背景开始,则列表视图控件会进入另一个模式消息循环,让用户能够通过拖动鼠标来形成一个矩形。 矩形内的项目会被选中。
WM_NCCREATE 分配并初始化内部数据结构,然后调用 DefWindowProc 函数。
WM_NCDESTROY 释放列表视图控件分配的资源。 除非使用 LVS_SHAREIMAGELISTS 样式,否则这样将包括删除全尺寸和小尺寸的图像列表。
WM_NOTIFY 处理标头控件通知代码。
WM_PAINT 显示更新区域内的任何项目。 对于回调项目,控件首先会向所有者窗口发送 LVN_GETDISPINFO 通知代码,以请求显示信息。 如果 wParam 参数为非 NULL,则控件假定该值为 HDC,并使用该设备上下文进行绘制。
WM_RBUTTONDOWN 处理方式与 WM_LBUTTONDOWN 消息相同,但控件会发送 NM_RCLICK (list view) 通知代码(而不是 NM_CLICK(列表视图))和 LVN_BEGINRDRAG 通知代码(而不是 LVN_BEGINDRAG)。 请注意,控件会处理对应的 WM_RBUTTONUP 消息,而不会对其进行调度。 因此,即使对控件进行了子类化,应用程序也无法看到此消息。
WM_SETFOCUS 重新绘制被聚焦的列表项目(如有),并向父窗口发送 NM_SETFOCUS 通知代码。
WM_SETFONT 保存指定的字体句柄,将消息转发到标题窗口(如有),并使用新字体重新绘制。
WM_SETREDRAW 打开或关闭重新绘制。
WM_TIMER 开始对项目标签进行编辑。 如果用户单击聚焦项目的标签,则列表视图控件会设置一个计时器,而不是立即进入编辑模式。 如果用户双击标签,计时器可让列表视图控件 进入编辑模式。
WM_VSCROLL 垂直滚动列表视图控件。
WM_WINDOWPOSCHANGED 更新窗口滚动条。 如果当前视图是图标或小图标视图,并且指定了 LVS_AUTOARRANGE 样式,则列表视图控件也将对列表项目进行排列。
WM_WININICHANGE 处理对系统指标的更改。