是否自动为列表框(WC_LISTVIEW)绘制焦点?

时间:2019-05-17 01:15:07

标签: c++ winapi mfc listbox

我创建了一个类似于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);
}

2 个答案:

答案 0 :(得分:0)

通常,默认的窗口过程为所有者响应WM_DRAWITEM消息而绘制的列表框项目绘制一个焦点矩形。

MSDN

  

对于空白列表框或组合框,itemID可以为-1。这允许   该应用程序仅在坐标处绘制焦点矩形   由rcItem成员指定,即使   控制。这向用户指示列表框还是组合框   有重点。 itemAction成员中的位设置方式   确定是否要像列表框一样绘制矩形   或组合框具有焦点。

答案 1 :(得分:0)

如果您不使用所有者/自定义绘制,则所有Windows通用控件都将自动为您绘制焦点矩形。

Windows 2000(及更高版本)默认情况下隐藏键盘加速器和焦点矩形,除非您使用键盘与窗口进行交互。

  

Windows使应用程序可以在其UI中隐藏或显示各种功能。这些设置称为the UI state。 UI状态包括以下设置:

     
      
  • 焦点指示器(例如按钮上的焦点矩形)
  •   
  • 键盘加速器(由控制标签中的下划线指示)
  •