MFC中记录用户对列表控件(或列表视图)列宽的调整
2021-06-11 22:08
标签:mfc return text 视图 无符号 ret struct record nes 如果需要设置最小和最大列宽,启用预留代码,具体可参考MFC中设置列表控件(或列表视图)的最小和最大列宽 MFC中记录用户对列表控件(或列表视图)列宽的调整 标签:mfc return text 视图 无符号 ret struct record nes 原文地址:https://www.cnblogs.com/fenggwsx/p/13522912.html声明成员变量
class CMyCtrl/CMyView :
public CListCtrl/CListView
{
...
public:
CMyCtrl/CMyView(); // 构造函数
protected:
const int m_nMinWidth = 80; // 最小列宽(如果不需要设置最小列宽可省略)
const int m_nMaxWidth = 320; // 最大列宽(如果不需要设置最大列宽可省略)
const int m_nDefaultColumnWidth[4]; // 默认列宽
int m_nColumnWidth[4]; // 实际列宽
...
}
初始化成员变量
CMyCtrl/CMyView::CMyCtrl/CMyView()
: m_nDefaultColumnWidth{ 120,120,90,90 } // 初始化为默认列宽
, m_nColumnWidth{ 0 } // 初始化为0,用于检测是否从读取到列宽
{
int* pData = NULL;
UINT n = 0;
theApp.GetProfileBinary(_T("Record"), _T("MyListCtrlColumnWidth/MyListViewColumnWidth"), (LPBYTE*)&pData, &n);
n = n * sizeof(BYTE) / sizeof(int); // n由字节长度变为元素个数
if (n > _countof(m_nColumnWidth)) // 防止下标越界
n = _countof(m_nColumnWidth);
for (UINT i = 0; i
修改插入列时的代码
int CMyCtrl/CMyView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CListCtrl/CListView::OnCreate(lpCreateStruct) == -1)
return -1;
/*GetListCtrl().*/SetExtendedStyle(GetListCtrl().GetExtendedStyle() | LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES | LVS_EX_DOUBLEBUFFER); // 设置扩展样式
/*GetListCtrl().*/InsertColumn(0, _T("column1"), LVCFMT_LEFT, m_nColumnWidth[0]); // 列宽使用 m_nColumnWidth[index]
/*GetListCtrl().*/InsertColumn(1, _T("column2"), LVCFMT_LEFT, m_nColumnWidth[1]);
/*GetListCtrl().*/InsertColumn(2, _T("column3"), LVCFMT_LEFT, m_nColumnWidth[2]);
/*GetListCtrl().*/InsertColumn(3, _T("column4"), LVCFMT_LEFT, m_nColumnWidth[3]);
return 0;
}
重写虚函数OnNotify
BOOL CMyCtrl/CMyView::OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult)
{
HD_NOTIFY* pHDN = (HD_NOTIFY*)lParam;
switch (pHDN->hdr.code)
{
// 预留代码,需要设置最小和最大列宽时启用下列代码
//case HDN_ITEMCHANGINGA:
//case HDN_ITEMCHANGINGW:
// if (pHDN->pitem->cxy pitem->cxy = m_nMinWidth;
// else if (pHDN->pitem->cxy > m_nMaxWidth) // 最大列宽
// pHDN->pitem->cxy = m_nMaxWidth;
// break;
case HDN_ENDTRACK:
// 预留代码,需要设置最小和最大列宽时启用下列代码
//if (pHDN->pitem->cxy pitem->cxy = m_nMinWidth;
//else if (pHDN->pitem->cxy > m_nMaxWidth) // 最大列宽
// pHDN->pitem->cxy = m_nMaxWidth;
m_nColumnWidth[pHDN->iItem] = pHDN->pitem->cxy;
theApp.WriteProfileBinary(_T("Record"), _T("MyListCtrlColumnWidth/MyListViewColumnWidth"), (LPBYTE)m_nColumnWidth, sizeof(m_nColumnWidth));
break;
default:
break;
}
return CListCtrl/CListView::OnNotify(wParam, lParam, pResult);
}
下一篇:PHP向客户端广播信息