我创建了一个类似于here提供的代码的列表框。在我的UI中,选项卡焦点rect是由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);
}
答案 0 :(得分:0)
通常,默认的窗口过程为所有者响应WM_DRAWITEM
消息而绘制的列表框项目绘制一个焦点矩形。
在MSDN
对于空白列表框或组合框,
itemID
可以为-1。这允许 该应用程序仅在坐标处绘制焦点矩形 由rcItem
成员指定,即使 控制。这向用户指示列表框还是组合框 有重点。itemAction
成员中的位设置方式 确定是否要像列表框一样绘制矩形 或组合框具有焦点。
答案 1 :(得分:0)
如果您不使用所有者/自定义绘制,则所有Windows通用控件都将自动为您绘制焦点矩形。
Windows 2000(及更高版本)默认情况下隐藏键盘加速器和焦点矩形,除非您使用键盘与窗口进行交互。
Windows使应用程序可以在其UI中隐藏或显示各种功能。这些设置称为the UI state。 UI状态包括以下设置:
- 焦点指示器(例如按钮上的焦点矩形)
- 键盘加速器(由控制标签中的下划线指示)