创建ListView时产生奇怪的效果

时间:2015-06-22 11:55:37

标签: c listview winapi

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

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

enter image description here

这是我用来创建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);

注意:我没有遇到这种效果的问题,我只是想了解它为什么会发生!

3 个答案:

答案 0 :(得分:1)

这只是因为按钮具有焦点而列表视图丢失了,单击列表视图并重新出现点。

答案 1 :(得分:0)

我相信虚线边框表示默认控件。在第二个屏幕截图中,转到按钮的属性并将默认按钮设置为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);

答案 2 :(得分:0)

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

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