是否为列表框(WC_LISTVIEW)自动绘制焦点矩形?
Posted
技术标签:
【中文标题】是否为列表框(WC_LISTVIEW)自动绘制焦点矩形?【英文标题】:Is focus rect drawn automatically for listbox (WC_LISTVIEW)? 【发布时间】:2019-05-17 01:15:06 【问题描述】:我创建了一个类似于here 提供的代码的列表框。在我的 UI 中,选项卡焦点矩形会由 DefWindowProc() 自动绘制还是我需要处理?我没有看到在标签焦点上绘制的焦点矩形。
谢谢。
HWND CreateListView (HWND hwndParent)
INITCOMMONCONTROLSEX icex; // Structure for control initialization.
icex.dwICC = ICC_LISTVIEW_CLASSES;
InitCommonControlsEx(&icex);
RECT rcClient; // The parent window's client area.
GetClientRect (hwndParent, &rcClient);
// Create the list-view window in report view with label editing enabled.
HWND hWndListView = CreateWindow(WC_LISTVIEW,
L"",
WS_CHILD | WS_VISIBLE | LVS_LIST,
0, 0,
rcClient.right - rcClient.left,
rcClient.bottom - rcClient.top,
hwndParent,
(HMENU)IDM_CODE_SAMPLES,
g_hInst,
NULL);
return (hWndListView);
【问题讨论】:
该链接上没有显示所有者绘图的代码。您是在谈论列表视图 (WC_LISTVIEW
) 还是列表框 (WC_LISTBOX
)?如果是列表视图,您是在谈论所有者绘制(使用LVS_OWNERDRAWFIXED
样式)还是自定义绘制(通过响应NM_CUSTOMDRAW
通知)?这些细节很重要。
谈谈WC_LISTVIEW
所以,本质上,我有一个 UI 对话框并将列表视图添加到其中。
默认窗口过程为所有者为响应WM_DRAWITEM消息而绘制的列表框项绘制一个焦点矩形。
确保至少选择一个列表视图项,否则将看不到焦点矩形。
【参考方案1】:
通常,默认窗口过程为所有者为响应WM_DRAWITEM
消息而绘制的列表框项绘制一个焦点矩形。
在MSDN
对于空列表框或组合框,
itemID
可以为 -1。这允许 仅在坐标处绘制焦点矩形的应用程序 由rcItem
成员指定,即使在 控制。这向用户指示是列表框还是组合框 有重点。如何在itemAction
成员中设置这些位 确定是否要像列表框一样绘制矩形 或组合框具有焦点。
【讨论】:
【参考方案2】:如果您不使用所有者/自定义绘制,那么所有 Windows 常用控件都会自动为您绘制焦点矩形。
Windows 2000(及更高版本)默认隐藏键盘加速键和焦点矩形,除非您使用键盘与窗口进行交互。
Windows 允许应用程序在其 UI 中隐藏或显示各种功能。这些设置称为the UI state。 UI 状态包括以下设置:
焦点指示器(例如按钮上的焦点矩形) 键盘加速键(在控件标签中用下划线表示)
【讨论】:
以上是关于是否为列表框(WC_LISTVIEW)自动绘制焦点矩形?的主要内容,如果未能解决你的问题,请参考以下文章
layer.js V3.0.1 文本框自动获得焦点 修改为 不自动获得焦点