请问各大位大虾.小弟在做一个程序界面的时候CListCtrl出现了一些问题.想请各位给点意见.帮我个忙.我做的CListCtrl,里面经常会有数据的更新,就像股票一样.经常会有数据的变化.时快时慢,有时几秒钟更新一次,有时几十秒更新一次.而CListCtrl每次收到数据的时候.我用一个线程让他一直在跑,在显示的宽度大于字体的宽度.也就是每一列的列宽都大于显示字体的宽度.但我现在这样子所获得的字体的长度也就不是具体字体的实际长度.而且我这个clistctrl有时需要更换字体,有时需要切换中英文.所以字体的长度总没法取到适当的值.而如果以上每种做法都适应到的最短宽度对于一些字体来说就显得太长了.我现在的问题就是想问一下各位大虾.有个没有什么方法能像我们双击clistctrl两列之间的那个时候CListCtrl以最长内容的长度做为列宽的那种算法.能够得到字体的最长长度.也就是我所说的自适应. 请各位指教.小弟不胜感激.
解决方案 »
- VC2008下建立ATL控件时,像VC6的FULL CONTROL在VC2008里是什么类型
- 调用CreateProcess运行外部程序没显示出窗口 在线等
- 【急求算法】望VC高手能帮忙一下~~谢谢~~
- ExitWindowsEx的问题
- 创建主页面不成功
- 当前listview选择着某行,如何用SDK取消该行的选择。
- 如何拆分MDI窗体的Frame窗体?
- 如何让一张张的图片(如jpg)组织成视频文件(如avi)?
- 大家收藏的什么书?做个调查
- 寻找软件界面外包
- 怎样取得计算机内的用户名列表
- 请教一个低级问题,vc.net 能实现vc的所有功能吗?我想学vc,直接学vc.net行吗?听说vc里有个mfc,.net中有这个吗?
改变字体可以响应WM_FONTCHANGE看看
插入新内容之前计算每列的最大宽度,如果有变化就SetColumnWidth动态调整如果这些用在自绘的LISTCTRL要好一些。
nColumnCount = pHeaderCtrl->GetItemCount()
for (int i = 0; i < nColumnCount; i++)
{
m_list.SetColumnWidth(i, LVSCW_AUTOSIZE);
int nColumnWidth = m_list.GetColumnWidth(i);
m_list.SetColumnWidth(i, LVSCW_AUTOSIZE_USEHEADER);
int nHeaderWidth = m_list.GetColumnWidth(i);
m_list.SetColumnWidth(i, max(nColumnWidth, nHeaderWidth));
}这段代码可以实现,但是最后一列在整个窗口比它长度要长的时候.最后一列会给拉得很长.还没有找到问题的解决办法.没办法让它只显示最后一列的长度.
// put this into the header file, in the public:section
void AdjustColumnWidth();
int GetColumnCount();
// and this into the cpp file, in the public: section
void CMyListCtrl::AdjustColumnWidth()
{
SetRedraw(FALSE);
int nColumnCount = GetColumnCount(); for (int i = 0; i < nColumnCount; i++)
{
SetColumnWidth(i, LVSCW_AUTOSIZE);
int nColumnWidth = GetColumnWidth(i);
SetColumnWidth(i, LVSCW_AUTOSIZE_USEHEADER);
int nHeaderWidth = GetColumnWidth(i);
SetColumnWidth(i, max(nColumnWidth, nHeaderWidth));
}
SetRedraw(TRUE);
}
int CMyListCtrl::GetColumnCount()
{
CHeaderCtrl* pHeaderCtrl = GetHeaderCtrl();
return (pHeaderCtrl->GetItemCount());
}