16,541
社区成员
用vs2022/2019的向导创建的MFC对话框项目,仅在界面上了一个ListCtrl,视图设为报表风格(report),在对话框初始化时加了以下几行代码:
BOOL Ctest002Dlg::OnInitDialog() {
。。。。
// TODO: 在此添加额外的初始化代码
DWORD dwStyle = m_ListCtrl.GetExtendedStyle();
dwStyle |= LVS_EX_FULLROWSELECT; //选中某行使整行高亮(只适用与report风格的listctrl)
dwStyle |= LVS_EX_GRIDLINES; //网格线(只适用与report风格的listctrl)
m_ListCtrl.SetExtendedStyle(dwStyle); //设置扩展风格
//插入表头项目
m_ListCtrl.InsertColumn(0, L"序号", LVCFMT_LEFT, 60);
m_ListCtrl.InsertColumn(1, L"姓名", LVCFMT_LEFT, 50);
m_ListCtrl.InsertColumn(2, L"昵称", LVCFMT_LEFT, 50);
m_ListCtrl.InsertColumn(3, L"毕业院校", LVCFMT_LEFT, 100);
m_ListCtrl.InsertColumn(4, L"专业", LVCFMT_LEFT, 100);
m_ListCtrl.InsertColumn(5, L"工作年限", LVCFMT_LEFT, 100);
m_ListCtrl.InsertColumn(6, L"加入时间", LVCFMT_LEFT, 160);
}
网上说是列宽不对,我将它们左调右调,结果都是歪的。有哪位大侠知道原因的?烦请告知,多谢!
感谢T0BSky大侠如此详细认真的回复,大师风范,赞一个
您所提到的3种方法我都试过了,发现还是没有效果,ListCtrl的竖线总是歪的。
这个问题挺奇怪的,MFC很久没用过了,记得以前的VS版本(2008及以前)中,ListCtrl用得很正常,没有这类问题
难道是这几行代码,在Win10 + VS2019/2022环境下的问题?
我用VS2010来测试这几行,发现结果也一样,ListCtrl的竖线也是歪的。。。
附上详细操作步骤:
1.用VS2019(已升级至最新,16.11.36)创建一个MFC应用,应用程序类型选择:基于对话框。其它全部默认。
2.对话框加一个控件List Control,视图设为报表风格(report)。其它全部默认。
3.给控件List Control添加一个变量:m_ListCtrl,变量类型为默认的CListCtrl。
4.在对话框初始化函数中,加入以下几行:
BOOL Ctest002Dlg::OnInitDialog() {
。。。。
// TODO: 在此添加额外的初始化代码
DWORD dwStyle = m_ListCtrl.GetExtendedStyle();
dwStyle |= LVS_EX_FULLROWSELECT; //选中某行使整行高亮(只适用与report风格的listctrl)
dwStyle |= LVS_EX_GRIDLINES; //网格线(只适用与report风格的listctrl)
m_ListCtrl.SetExtendedStyle(dwStyle); //设置扩展风格
//插入表头项目
m_ListCtrl.InsertColumn(0, L"序号", LVCFMT_LEFT, 60);
m_ListCtrl.InsertColumn(1, L"姓名", LVCFMT_LEFT, 50);
m_ListCtrl.InsertColumn(2, L"昵称", LVCFMT_LEFT, 50);
m_ListCtrl.InsertColumn(3, L"毕业院校", LVCFMT_LEFT, 100);
m_ListCtrl.InsertColumn(4, L"专业", LVCFMT_LEFT, 100);
m_ListCtrl.InsertColumn(5, L"工作年限", LVCFMT_LEFT, 100);
m_ListCtrl.InsertColumn(6, L"加入时间", LVCFMT_LEFT, 160);
}
5.编译运行。
这几行代码无论是用VS2022,或者VS2019,还是更早的VS2010,结果都一样:竖线歪了。
想不明白。要不您试下看是否如此?
在VS2019或VS2022中创建的MFC对话框项目中,如果你发现CListCtrl控件的竖线(网格线)是歪的,有几个可能的原因和解决方案可以尝试:
```cpp
m_ListCtrl.InsertColumn(0, L"序号", LVCFMT_CENTER, 60);
m_ListCtrl.InsertColumn(1, L"姓名", LVCFMT_CENTER, 50);
m_ListCtrl.InsertColumn(2, L"昵称", LVCFMT_CENTER, 50);
m_ListCtrl.InsertColumn(3, L"毕业院校", LVCFMT_CENTER, 100);
m_ListCtrl.InsertColumn(4, L"专业", LVCFMT_CENTER, 100);
m_ListCtrl.InsertColumn(5, L"工作年限", LVCFMT_CENTER, 100);
m_ListCtrl.InsertColumn(6, L"加入时间", LVCFMT_CENTER, 160);
2. DPI缩放问题
如果你的系统或应用程序启用了高DPI缩放,可能会导致显示问题。可以尝试以下方法解决:
修改应用程序的DPI感知设置
在应用程序的资源文件中添加以下代码,以使应用程序声明自己是DPI感知的:
<application xmlns="urn:schemas-microsoft-com:asm.v3">
<windowsSettings>
<dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true/pm</dpiAware>
</windowsSettings>
</application>
或者在代码中设置DPI感知
在你的OnInitDialog函数的最开始添加以下代码:
SetProcessDPIAware();
3. 确保主题和视觉样式一致
某些情况下,MFC控件可能会受到主题和视觉样式的影响,导致显示异常。确保你的项目启用了视觉样式。可以在项目的预编译头文件(通常是stdafx.h或pch.h)中包含以下代码:
```cpp
#pragma comment(linker,"\"/manifestdependency:type='win32' \
name='Microsoft.Windows.Common-Controls' version='6.0.0.0' \
processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")
最后一个建议
如果以上方法均无效,可以尝试更新你的Visual Studio和Windows系统到最新版本,以确保不存在已知的兼容性或显示问题。
希望以上建议能帮助你解决CListCtrl网格线歪的问题。如果有任何进一步的问题或需要更多的帮助,请随时告知!