一个关于MFC里Listbox control的问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一个关于MFC里Listbox control的问题相关的知识,希望对你有一定的参考价值。
如何在列表框中显示多个列,像下图这样
在资源编辑器中选择ListCtrl,设置属性为Report在OnInitDialog中,调用SetExtendedStyle设置扩展风格为LVS_EX_GRIDLINES
DWORD dwStyle = m_list.GetExtendedStyle();
//dwStyle |= LVS_EX_FULLROWSELECT;//选中某行使整行高亮(只适用与report风格的listctrl)
dwStyle |= LVS_EX_GRIDLINES;//网格线(只适用与report风格的listctrl)
m_list.SetExtendedStyle(dwStyle); //设置扩展风格
至于其他更多操作,找度娘即可,有很多介绍用法的博客,其实基本用法和ListBox的差不多。 参考技术A 就是设置一下 LIstCtrl 的属性.
应该是report 风格.
查msdn 最好直接了. 参考技术B 写一个类,继承listBox和listControl追问
能具体点吗,我是新手
MFC (C++):如何按设计设置 ListBox 的宽度?
【中文标题】MFC (C++):如何按设计设置 ListBox 的宽度?【英文标题】:MFC (C++): how to set the width of ListBox as designed? 【发布时间】:2020-02-05 19:23:02 【问题描述】:我正在关注此链接以动态设置 ListBox 的高度 (How to resize a Win32 listbox to fit its content?)。但是,同时我想保持宽度固定(即最初在 rc 中指定的值)。但我不知道如何检索值并设置宽度。
【问题讨论】:
其实你引用的帖子也提供了ListBox宽度计算的解决方案。您是否尝试过 void AutosizeListBox(HWND hWndLB) 函数的第二个实现?代码位于EDIT: Added a version that calculates horizontal size as well
下。
@Jackdaw,如果我理解正确,是否取决于字符数?我需要的是由设计确定的固定宽度。
AutosizeListBox(HWND hWndLB) 函数根据 ListBox 中的最大字符串计算宽度,以尊重 ListBox 使用的当前字体。考虑到当前字体,字符数并不那么重要,这就是行的长度。
那篇文章中有两个版本的函数。第一个仅更改控件的高度。第二个改变宽度和高度。
@JonathanPotter,第一个版本也改变了宽度。我尝试注释掉“rc.right += ...”这行,但是宽度还是变了,和设计不匹配。
【参考方案1】:
我想要实现的是根据项目数调整 ListBox 的高度,同时保持设计中指定的宽度固定。我非常关注这里的解决方案(How to resize a Win32 listbox to fit its content?)。它改变了高度,但也修改了宽度,这是不可接受的。
以下行通过考虑修复问题的滚动条宽度来调整宽度。
rc.right += (GetSystemMetrics(SM_CXEDGE) * 2);
+ if ((list.GetStyle() & WS_VSCROLL) != 0)
+ rc.right += GetSystemMetrics(SM_CXVSCROLL);
或者按照 cmets 中的建议,
- rc.right += (GetSystemMetrics(SM_CXEDGE) * 2);
rc.bottom += GetSystemMetrics(SM_CXEDGE) * 2;
+ RECT window_rc;
+ ::GetWindowRect(hWndLB, &window_rc);
// resize
- ::SetWindowPos(hWndLB, 0, 0, 0, rc.right, rc.bottom, SWP_NOMOVE | SWP_NOZORDER | SWP_NOACTIVATE);
+ ::SetWindowPos(hWndLB, 0, 0, 0, window_rc.right - window_rc.left, rc.bottom, SWP_NOMOVE | SWP_NOZORDER | SWP_NOACTIVATE);
【讨论】:
只需调用GetWindowRect
并保持调用SetWindowPos
的宽度。
@IInspectable,我用 GetWindowRect 替换了 GetClientRect,它不能正常工作。宽度要大得多。
宽度计算为right - left
。如果那是“大得多”,你可能搞砸了。
@IInspectable,是的,你是对的。它有效,我相应地修改了答案。感谢您的帮助!以上是关于一个关于MFC里Listbox control的问题的主要内容,如果未能解决你的问题,请参考以下文章
关于MFC对话框里使用Tab Control及相关多页面切换问题
关于MFC:鼠标放在LISTBOX上,把上面显示的信息悬浮地显示出来。
VS2010里MFC中的ListBox为啥输出字符时,显示不出字体,只能看到有这一项?