2016-09-26 76 views
1

Screenshot of wizard dialog自动调整列宽在对话框

我要自动调整列宽匹配最长内容宽度适合的内容。我做了一个功能(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; 
} 
+0

我在旧的应用程序中有一些非常类似的代码,它的工作原理。我在OnInitialUpdate()函数中调用它。你的代码对我来说似乎很好。也许尝试无效的ListView控件,而不是调用UpdateWindow()? –

+0

UpdateWindow()现在只是一个无助的函数。在我的代码中,ResizeColumnWidths()不能被InsertDependency()调用,因为现在没有内容插入,并且我得到了一个名为AddDependency()的函数来调用InsertDependency()。但是如果我在AddDependency()的末尾调用ResizeColumnWidths(),程序将会崩溃。我在选择对话框中提交的事件后,如何获得自动调整大小列的效果。先生,你能告诉我哪一步调用了你旧应用中的OnInitialUpdate()。或OnInitialUpdate()只是应用程序的初始功能? – grant

+0

我无法重现此行为。在向导窗口中前后移动不应导致调整大小。显示其余的代码。 –

回答

0

这事发生在我。我应该处理点击选择事件提交的按钮的步骤,对吧?但是,我应该在哪里以及如何处理它。

+0

这不是一个答案,你应该删除这个。让它成为评论。 –