1
我要自动调整列宽匹配最长内容宽度适合的内容。我做了一个功能(ResizeColumnWidth
)来完成这项工作。但是,在添加比标题长的内容之后,该函数似乎不起作用。一旦我点击返回或下一步按钮并再次返回该对话框,它将自动调整列宽。在字段中添加内容时,是否在调用调整大小功能后错过任何步骤?或者我是否在错误的地方调用了这个函数?
这里是我的代码:
void CWzdEventDependencies::ResizeColumnWidths()
{
SetRedraw(FALSE);
m_lstDependencies.SetColumnWidth(0, 100);
int nHeaderWidth = m_lstDependencies.GetColumnWidth(0);
m_lstDependencies.SetColumnWidth(0, LVSCW_AUTOSIZE);
int nColumnWidth = m_lstDependencies.GetColumnWidth(0);
m_lstDependencies.SetColumnWidth(0, max(nColumnWidth, nHeaderWidth));
m_lstDependencies.SetColumnWidth(1, 95);
m_lstDependencies.SetColumnWidth(2, LVSCW_AUTOSIZE_USEHEADER);
nHeaderWidth = m_lstDependencies.GetColumnWidth(2);
m_lstDependencies.SetColumnWidth(2, LVSCW_AUTOSIZE);
nColumnWidth = m_lstDependencies.GetColumnWidth(2);
m_lstDependencies.SetColumnWidth(2, max(nColumnWidth, nHeaderWidth));
m_lstDependencies.SortColumn(0);
SetRedraw(TRUE);
// m_lstDependencies.SetColumnWidth(0, 50);
}
enter code here
void CWzdEventDependencies::InsertDependencies()
{
m_lstDependencies.DeleteAllItems();
CorrelationData::FieldsDependenciesType::const_iterator It = m_pFieldsDependencies->begin();
int nDependency = 0;
for(; It != m_pFieldsDependencies->end(); ++It, ++nDependency)
{
InsertDependency(*It);
}
}
int CWzdEventDependencies::InsertDependency(const CorrelationEventFieldDependencies* pDependency)
{
AString strField1 = pDependency->GetField1();
AString strOperation = pDependency->GetOperation();
AString strField2 = pDependency->GetField2();
LVITEM lvItem = {0};
lvItem.mask = LVIF_TEXT|LVIF_PARAM;
lvItem.iItem = m_lstDependencies.GetItemCount();
lvItem.pszText = strField1.LockBuffer();
lvItem.lParam = (LPARAM) pDependency;
lvItem.iItem = m_lstDependencies.InsertItem(&lvItem, m_pCmbFields);
strField1.UnlockBuffer();
ASSERT(lvItem.iItem != -1);
lvItem.pszText = strOperation.LockBuffer();
lvItem.iSubItem = 1;
m_lstDependencies.SetItem(&lvItem, m_pCmbSign);
strOperation.UnlockBuffer();
lvItem.pszText = strField2.LockBuffer();
lvItem.iSubItem = 2;
m_lstDependencies.SetItem(&lvItem, m_pCmbFields);
strField2.UnlockBuffer();
ResizeColumnWidths();
UpdateWindow();
return lvItem.iItem;
}
我在旧的应用程序中有一些非常类似的代码,它的工作原理。我在OnInitialUpdate()函数中调用它。你的代码对我来说似乎很好。也许尝试无效的ListView控件,而不是调用UpdateWindow()? –
UpdateWindow()现在只是一个无助的函数。在我的代码中,ResizeColumnWidths()不能被InsertDependency()调用,因为现在没有内容插入,并且我得到了一个名为AddDependency()的函数来调用InsertDependency()。但是如果我在AddDependency()的末尾调用ResizeColumnWidths(),程序将会崩溃。我在选择对话框中提交的事件后,如何获得自动调整大小列的效果。先生,你能告诉我哪一步调用了你旧应用中的OnInitialUpdate()。或OnInitialUpdate()只是应用程序的初始功能? – grant
我无法重现此行为。在向导窗口中前后移动不应导致调整大小。显示其余的代码。 –