【问题标题】:Strange effect when creating a ListView创建ListView时的奇怪效果
【发布时间】:2015-06-22 11:55:37
【问题描述】:

我在创建 Listview 时注意到一个奇怪的效果。

当我创建 ListView 而不创建 Button 时,ListView 中的选定项目有一个虚线边框。但是,当我还创建一个 Button 时,ListView 所选项目不再有虚线边框。只有当我有一个启用通用控件的清单文件时才会发生这种情况 6:

这是我用来创建 Window 和 ListView 和 Button 的代码:

// Create Window
HWND hWnd = CreateWindowEx(0, "WinClass", "My Window", WS_OVERLAPPEDWINDOW, 261, 172, 394, 284, NULL, NULL, hInstance, NULL);

// Create ListView
HWND hListView = CreateWindowEx(0, WC_LISTVIEW, "", WS_CHILD | LVS_REPORT | WS_VISIBLE, 0, 0, 232, 190, hWnd, 0, GetModuleHandle(NULL), NULL);

// Create Button
HWND hButtonRefresh = CreateWindowEx(NULL, "BUTTON", "OK", WS_CHILD | WS_VISIBLE | BS_DEFPUSHBUTTON, 10, 200, 110, 25, hWnd, NULL, GetModuleHandle(NULL), NULL);

注意:我对这个效果没有问题,我只是想了解为什么会这样!

【问题讨论】:

  • “虚线边框”表示列表视图具有输入焦点。默认情况下,最后创建的控件可能会获得输入焦点,这意味着当您有一个按钮时,它拥有它而不是列表视图。
  • ^ 这个。可以看出,OK 带有蓝色边框。
  • @Jonathan Potter 但是在两张图片中,我都点击了 ListView 项目,所以 ListView 有焦点,而不是 Button。
  • 现在,焦点矩形在 Windows 中默认隐藏,直到您实际使用键盘。您可以使用WM_CHANGEUISTATE 消息来更改此设置。

标签: c listview winapi


【解决方案1】:

只是因为按钮有焦点而列表视图失去了焦点,单击列表视图,点应该会重新出现。

【讨论】:

  • 不,这不是问题所在。即使我单击任何 ListView 项,样式也保持不变。
  • @paul 已经解释了 cmets 中发生了什么。还有什么不明白的?你为什么要在这上面浪费赏金?
【解决方案2】:

我相信虚线边框表示默认控件。在第二个屏幕截图中,转到按钮的属性并将默认按钮设置为 false,然后您应该会看到文本周围的虚线边框,就像在第一个屏幕截图中一样。

为此,在资源视图中打开对话框,选择按钮并从鼠标右键菜单中选择属性。在“属性”窗口中,您应该会在“行为”部分看到默认按钮 - 只需将其更改为 False。

或者在代码中尝试这样的事情:-

DWORD style = m_BtnOk.GetStyle();
// remove default push button style
style &= ~BS_DEFPUSHBUTTON;
// set the style
::SendMessage(m_BtnClose.GetSafeHwnd(), BM_SETSTYLE, (WPARAM)style, (LPARAM)TRUE);

【讨论】:

  • 如何将默认按钮设置为 false?
  • 我没有使用资源,你可以在我的问题中看到我用来创建按钮的代码。
  • Doh - 对不起。只需从 OK 按钮的行中删除 BS_DEFPUSHBUTTON。
  • 我删除了BS_DEFPUSHBUTTON,但效果依旧!
  • 虚线边框在listview上,怎么会是“默认控件”?
【解决方案3】:

正如其他人所指出的,它的目的是指示输入焦点。如果您在任何原生表单周围Tab,您会看到矩形在开发人员设置的索引周围跳跃。

它出现的原因是因为它有一个TabStop。由于第一个示例中只有一个元素,因此制表位只有一种可能性,因此由矩形表示。玩转TabStop 属性,Tab,看看有什么变化。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-15
    • 1970-01-01
    • 1970-01-01
    • 2022-10-02
    • 2012-11-15
    • 2011-11-01
    相关资源
    最近更新 更多