有点乱,呵呵
关于CListCtrl用法的总结:
1、重新设置显示风格:
LONG lStyle;
lStyle=GetWindowLong(m_ListCtrl.m_hWnd,GWL_STYLE);//获取当前窗口类型
lStyle&=~LVS_TYPEMASK; //清除显示方式位
lStyle|=LVS_REPORT; //设置显示方式
SetWindowLong(m_ListCtrl.m_hWnd,GWL_STYLE,lStyle);//设置窗口类型
2、
BOOL TsLsDlg::OnInitDialog()
{
CDialog::OnInitDialog();
//设置显示风格,报表、总是显示被选中的、显示焦点行
DWORD dwStyle;
dwStyle = m_ListCtrl.GetExtendedStyle();//GetStyle();
//dwStyle |= LVS_EX_GRIDLINES |LVS_SINGLESEL |LVS_EX_FULLROWSELECT|LVS_SHOWSELALWAYS ;
dwStyle |=LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES|LVS_SHOWSELALWAYS ;
m_ListCtrl.SetExtendedStyle(dwStyle);
m_ListCtrl.SetBkColor(RGB(0,0,0));
m_ListCtrl.SetTextColor(RGB(250,250,255));
m_ListCtrl.SetTextBkColor(RGB(0,0,0));
插入列:
3、
m_ListCtrl.InsertColumn(0,_T("编号"),LVCFMT_CENTER,50);
m_ListCtrl.InsertColumn(1,_T("名称"),LVCFMT_CENTER,150);
m_ListCtrl.InsertColumn(2,_T("总额"),LVCFMT_CENTER,100);
// m_ListCtrl.InsertColumn(5,"Col 2",LVCFMT_LEFT,300,1); 最后一个是列索引号
}
4、
//获得鼠标坐标、并转换成客户区坐标
CPoint posMouse;
GetCursorPos(&posMouse);
ScreenToClient(&posMouse);
5、//计算整个ClistCtrl矩形
CRect rect,rectRectangle;
int nItemNum = m_ListCtrl.GetItemCount(); //获得行数
int nHeight;int nWidth;
if(nItemNum >0){
m_ListCtrl.GetItemRect(0,&rect,LVIR_BOUNDS); //获得单行矩形 nHeight=rect.Height()*nItemNum;//整个ClistCtrl矩形的高度
nWidth=rect.Width();//整个ClistCtrl矩形的宽度,以0,0为顶点
6、
//获得行,列的个数
CHeaderCtrl* pHeader = m_ListCtrl.GetHeaderCtrl();
int nColCount = pHeader->GetItemCount();//获得列的个数
7、
得到鼠标单击时CListCtrl控件中被选中的表项的列序号
::GetCursorPos(&mpt);
int a1,a2;a1=mpt.x;a2=mpt.y;
//转换到客户区坐标
//CPoint cpt=mpt;
int intx;int nwth=0; m_ListCtrl.ScreenToClient(&mpt); //屏幕坐标转换成客户区坐标
要先判断该点是否在列之内
nWidth=rect.Width();//整个ClistCtrl矩形的宽度,以0,0为顶点
if(nWidth<mpt.x)
{
for(intx=0;intx<nColCount;intx++) //我的测试中的列是nColCount列
{
nwth=m_ListCtrl.GetColumnWidth(intx)+nwth; //累加列各的宽度,和客户区x坐标比较
if(nwth>mpt.x)break;
}
}
//结果是-----在intx列
稍后会有添加。还要多谢各位CSDN高手们的指点!
关于CListCtrl用法的总结:
1、重新设置显示风格:
LONG lStyle;
lStyle=GetWindowLong(m_ListCtrl.m_hWnd,GWL_STYLE);//获取当前窗口类型
lStyle&=~LVS_TYPEMASK; //清除显示方式位
lStyle|=LVS_REPORT; //设置显示方式
SetWindowLong(m_ListCtrl.m_hWnd,GWL_STYLE,lStyle);//设置窗口类型
2、
BOOL TsLsDlg::OnInitDialog()
{
CDialog::OnInitDialog();
//设置显示风格,报表、总是显示被选中的、显示焦点行
DWORD dwStyle;
dwStyle = m_ListCtrl.GetExtendedStyle();//GetStyle();
//dwStyle |= LVS_EX_GRIDLINES |LVS_SINGLESEL |LVS_EX_FULLROWSELECT|LVS_SHOWSELALWAYS ;
dwStyle |=LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES|LVS_SHOWSELALWAYS ;
m_ListCtrl.SetExtendedStyle(dwStyle);
m_ListCtrl.SetBkColor(RGB(0,0,0));
m_ListCtrl.SetTextColor(RGB(250,250,255));
m_ListCtrl.SetTextBkColor(RGB(0,0,0));
插入列:
3、
m_ListCtrl.InsertColumn(0,_T("编号"),LVCFMT_CENTER,50);
m_ListCtrl.InsertColumn(1,_T("名称"),LVCFMT_CENTER,150);
m_ListCtrl.InsertColumn(2,_T("总额"),LVCFMT_CENTER,100);
// m_ListCtrl.InsertColumn(5,"Col 2",LVCFMT_LEFT,300,1); 最后一个是列索引号
}
4、
//获得鼠标坐标、并转换成客户区坐标
CPoint posMouse;
GetCursorPos(&posMouse);
ScreenToClient(&posMouse);
5、//计算整个ClistCtrl矩形
CRect rect,rectRectangle;
int nItemNum = m_ListCtrl.GetItemCount(); //获得行数
int nHeight;int nWidth;
if(nItemNum >0){
m_ListCtrl.GetItemRect(0,&rect,LVIR_BOUNDS); //获得单行矩形 nHeight=rect.Height()*nItemNum;//整个ClistCtrl矩形的高度
nWidth=rect.Width();//整个ClistCtrl矩形的宽度,以0,0为顶点
6、
//获得行,列的个数
CHeaderCtrl* pHeader = m_ListCtrl.GetHeaderCtrl();
int nColCount = pHeader->GetItemCount();//获得列的个数
7、
得到鼠标单击时CListCtrl控件中被选中的表项的列序号
::GetCursorPos(&mpt);
int a1,a2;a1=mpt.x;a2=mpt.y;
//转换到客户区坐标
//CPoint cpt=mpt;
int intx;int nwth=0; m_ListCtrl.ScreenToClient(&mpt); //屏幕坐标转换成客户区坐标
要先判断该点是否在列之内
nWidth=rect.Width();//整个ClistCtrl矩形的宽度,以0,0为顶点
if(nWidth<mpt.x)
{
for(intx=0;intx<nColCount;intx++) //我的测试中的列是nColCount列
{
nwth=m_ListCtrl.GetColumnWidth(intx)+nwth; //累加列各的宽度,和客户区x坐标比较
if(nwth>mpt.x)break;
}
}
//结果是-----在intx列
稍后会有添加。还要多谢各位CSDN高手们的指点!
我有一个函数可以对CListCtrl任何一列排序,可以按照字符串或者数值排序
基本方法是先增加一个列把itemdata保存进去,然后把itemindex设置到itemdata,然后调用sort函数(sort会使用一个比较函数,比较函数的参数是itemdata),最后把保存的itemdata恢复,并删除临时增加的那一个列
这个方法假定sort期间itemindex是不变的