是否为列表框(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)自动绘制焦点矩形?的主要内容,如果未能解决你的问题,请参考以下文章

jquery js 当文本框获得焦点时,自动选中里面的文字

layer.js V3.0.1 文本框自动获得焦点 修改为 不自动获得焦点

WPF:删除样式列表框中焦点项目周围的虚线边框

打开/保存文件对话框设置焦点到文件列表视图

axure7.0如何实现光标在文本框中获得焦点时,文本框内容自动清空。失去焦点时显示默认文字,谢谢!

如何让输入框默认获得焦点