创建ListView时产生奇怪的效果

pau*_*aul 5 c winapi listview

我在创建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);
Run Code Online (Sandbox Code Playgroud)

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

小智 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);
Run Code Online (Sandbox Code Playgroud)