- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
简要说明:
I got an instance of CTreectrl
class where objects are stored, when an object is selected corresponding list report for that object is displayed.
我需要调整列的宽度派生自 CListCtrl
的类 MyListCtrl 的实例,以便用户无需调整列的大小即可看到该列中的数据。
我如何完成我的任务:
我实现了从树中选择对象时调用的方法 InitColumnWidth
void COwnListCtrl::InitColumnWidth ( unsigned const * defwidth, BOOL chars )
{
/* find the largest string in each column and set column width accordingly
so that user no longer need to manually adjust columns width */
RECT r;
GetClientRect ( & r );
int* arrOfMaxColumnWidth = new int[NumCol]; // array where max length for columns will be stored
for (int i = 0; i < NumCol; ++i)
arrOfMaxColumnWidth[i] = 0; // initialize
tstring dataInColumn;
double Scale = ( defwidth && chars ) ? GetCharAveWidth ( * GetFont () ) : ( r.right * 0.01 );
int numberOfVisitedItems = 0;
do
{
dataInColumn = _T(""); // initialize
for (int col = 0; col < NumCol; ++col)
{
//DWORD const itemData = this->GetItemData(numberOfVisitedItems);
dataInColumn = this->GetSubItemString(this->GetItemData(numberOfVisitedItems), col);
/* 1-st varaint returns only first row of the list
because GetItemData always returns zero, but I need to visit all rows */
dataInColumn = this->GetSubItemString(numberOfVisitedItems, col);
/* 2-nd variant, works for most objects from CTreeCtrl, but for a few of them assertion is raised, system reports on the corrupted heap and application terminates*/
if (dataInColumn.length() > arrOfMaxColumnWidth[col])
arrOfMaxColumnWidth[col] = dataInColumn.length();
}
++numberOfVisitedItems;
}
while(dataInColumn.length() != 0); /* do{} while loop is used to get number of rows in the table
as long as an empty string is read, which means that all rows were read*/
for (int col = 0; col < NumCol; ++col)
int tmp = ColWidth[col] = arrOfMaxColumnWidth[col] * Scale;
ColWidth[0] = 100;
需要帮助!
最佳答案
使用这个(用下面的代码替换你的 for (int col = 0; col < NumCol; ++col)
):
for (int col = 0; col < NumCol; ++col)
{
int len = 0;
for(int row = 0; this->GetItemCount(); ++row)
{
CString item = this->GetItemText(row, col);
if(item.GetLength() > len) len = item.GetLength();
}
if (len > arrOfMaxColumnWidth[col])
arrOfMaxColumnWidth[col] = len; // should you multiple it to Scale?
}
关于c++ - 如何遍历 CListCtrl 的元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16171549/
我有一个CListCtrl(报告样式),可以在其中清除列表并在特定时间重新填充它。在执行此操作时,我想保持垂直滚动位置。我发现有两种方法看起来很有希望: EnsureVisible() GetScro
如何更改 Clistctrl 项(报 TableView )的文本颜色? 最佳答案 您需要处理 NM_CUSTOMDRAW消息并更改该处理程序中的文本颜色。 有关示例,请参阅 this article
我有一个 CListCtrl,其中包含大约 2500 个不同的元素,其中包含一个 48x48 的图标和文本。 由于数据量大,我将其实现为提供的虚拟列表 ON_NOTIFY(LVN_GETDISPINF
如何保持CListCtrl的水平滚动条位置?我会定期转储并重新填充列表控件的内容,因此无需显式记住旧位置并将其恢复,滚动只返回到左上角。 我早些时候问了一个相关的问题CListCtrl: How to
我有一个显示多个系统的多个数据的 clistctrl。不同系统只能选择 1 个项目。 最初,clistctrl 会加载从不同系统的控件中选择的第一个项目。 但是当我在更改模型中的数据并设置选择后通过单
我在图标 View 中使用 CListCtrl,但它会水平滚动: 1 3 5 7 --> 2 4 6 8 --> 我宁愿它水平滚动: 1 2 3 4 5 6 | | V V 有办法吗? 最佳答案 将设
我正在为 Windows Mobile 创建 MFC 应用程序,但不知道如何为列表控件 (CListCtrl) 启用多选。在属性面板中 Single Selection 设置为 False 但仍然无法
我必须根据 CListViewCtrl 中的值启用/禁用对话框上的按钮。基于所选行。我做到了这一点: NOTIFY_HANDLER(IDC_LIST, LVN_ITEMCHANGED, OnMyLis
我需要在 MFC 中创建一个 ListControl,每行具有不同的列数。我该怎么做? 最佳答案 那是不可能的。解决方法很简单,只是不要在子项中放置任何文本。 关于c++ - 自定义 CListCtr
如何使用标题文本获取项目的索引号?我正在使用 MFC 的 CListCtrl 类。我有项目的标题文本,我可以获取该项目的索引然后更新其文本吗?如果您能提供示例,将会很有帮助。 最佳答案 CListCt
CMyListCtrl 处于虚拟数据模式和所有者绘制。当控件需要数据时,将发送一个 LVN_GETDISPINFO 通知。 下面的代码工作正常,除了它多次显示每一行。 文档说如果我设置项目的掩码的 L
有一个CListCtrl带有SetExtendedStyle (LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT),单选是false。我希望能够用鼠标选择多行。从空白区域
我有一个包含多个列的 CListCtrl,所有列都可以作为排序依据。我想添加 up 和 down 图标,以便清楚当前按哪一列排序以及朝哪个方向排序;很像 Windows 资源管理器。我的想法是向列名添
我正在使用 CListCtrl 控件在我的 MFC 应用程序中显示信息。目前,我在 SetExtendedStyle 中设置了 LVS_EX_CHECKBOXES,因此控件中的所有行旁边都有一个复选框
我目前有 NM_CUSTOMDRAW 消息调用一个函数来在报告模式下为 listctrl 的行着色。我可以检测何时选择了一行并自己为其着色,但是不会为选定的单元格调用此方法,因此我无法为该单元格着色。
谁能帮我知道,CListCtrl::GetItemData() 在 MFC、VC++ 中有什么用? 我查阅了 MSDN 描述,但不够清楚。 如果有人可以提供简短的解释和一些示例,那就太好了并且会有很大
如何使 CListCtrl 自动调整其列的宽度?通常,当列表中的项目太长时,后端会从 View 中消失,用户必须手动调整相应列的宽度。有没有办法通过代码来做到这一点? 最佳答案 自动调整列大小很容易:
我想将 CListCtrl 控件的任何单元格的字体更改为粗体。任何人都可以告诉如何为 CList Ctrl 做到这一点。 我已经为 CTreeCtrl 做了这个,就像这样 pTC->SetItemSt
我想为列表的任何列使用 CListCtrl.EditLabel()。我该如何实现这样的功能? 最佳答案 这是可行的,但它确实需要大量填充鼠标点击和焦点事件。 简而言之,您捕获鼠标左键按下消息并将其转换
我想将特定列的背景颜色更改为对话框的颜色(灰色)。我怎样才能实现它? void CUcsOpTerminalDlg::OnCustomdrawFeatureList(NMHDR *pNMHDR, LR
我是一名优秀的程序员,十分优秀!