15,979
社区成员
发帖
与我相关
我的任务
分享
多次遇到这个问题,终于绕路解决了,在OnSize中启动一个时钟,在时钟函数里调整列宽,把调整列宽变成异步的解决问题。
// TODO: Add extra initialization here
m_ctrlList.InsertColumn(0, "", LVCFMT_LEFT, 1);
m_ctrlList.InsertColumn(1, "表头", LVCFMT_LEFT, 100);
CString strItem;
for (int i=0; i<7; i++)
{
strItem.Format("行行内容行内容行内容行内容行内容行内容行内容行内容行内容行内容行内容内容%d", i+1);
m_ctrlList.InsertItem(i, strItem);
m_ctrlList.SetItem(i, 1, LVIF_TEXT, strItem, 0, 0, 0, 0);
}
// 修改列宽
m_ctrlList.SetColumnWidth(1, LVSCW_AUTOSIZE_USEHEADER);// -2
void CListCtrlDlg::OnSize(UINT nType, int cx, int cy)
{
CDialog::OnSize(nType, cx, cy);
if(IsWindow(m_ctrlList))
{
CRect rc;
GetClientRect(&rc);
// 修改列宽
m_ctrlList.SetColumnWidth(1, LVSCW_AUTOSIZE_USEHEADER);// -2
m_ctrlList.MoveWindow(&rc);
m_ctrlList.ShowScrollBar(SB_HORZ, FALSE);// must after MoveWindow
}
// TODO: Add your message handler code here
}
BOOL CDlg2Dlg::OnInitDialog()
{
CDialog::OnInitDialog();
// 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
// 执行此操作
SetIcon(m_hIcon, TRUE); // 设置大图标
SetIcon(m_hIcon, FALSE); // 设置小图标
// TODO: 在此添加额外的初始化代码
m_ListCtrl.InsertColumn(0, _T("Test"));
m_ListCtrl.InsertItem(0, _T("12345612"));
PostMessage(WM_SIZE, 0, 0);
return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}
void CDlg2Dlg::OnSize(UINT nType, int cx, int cy)
{
CDialog::OnSize(nType, cx, cy);
// TODO: 在此处添加消息处理程序代码
if(m_ListCtrl.m_hWnd)
{
CRect rcRect;
m_ListCtrl.GetClientRect(&rcRect);
m_ListCtrl.SetColumnWidth(0, rcRect.Width());
}
}