<!-- [if gte mso 9]><xml>
<w:WordDocument>
<w:View>Normal</w:View>
<w:Zoom>0</w:Zoom>
<w:PunctuationKerning/>
<w:DrawingGridVerticalSpacing>7.8 磅</w:DrawingGridVerticalSpacing>
<w:DisplayHorizontalDrawingGridEvery>0</w:DisplayHorizontalDrawingGridEvery>
<w:DisplayVerticalDrawingGridEvery>2</w:DisplayVerticalDrawingGridEvery>
<w:ValidateAgainstSchemas/>
<w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid>
<w:IgnoreMixedContent>false</w:IgnoreMixedContent>
<w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText>
<w:Compatibility>
<w:SpaceForUL/>
<w:BalanceSingleByteDoubleByteWidth/>
<w:DoNotLeaveBackslashAlone/>
<w:ULTrailSpace/>
<w:DoNotExpandShiftReturn/>
<w:AdjustLineHeightInTable/>
<w:BreakWrappedTables/>
<w:SnapToGridInCell/>
<w:WrapTextWithPunct/>
<w:UseAsianBreakRules/>
<w:DontGrowAutofit/>
<w:UseFELayout/>
</w:Compatibility>
<w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
</w:WordDocument>
</xml><![endif]--><!-- [if gte mso 9]><xml>
<w:LatentStyles DefLockedState="false" LatentStyleCount="156">
</w:LatentStyles>
</xml><![endif]--><!-- [if gte mso 10]>
<style>
/* Style Definitions */
table.MsoNormalTable
{mso-style-name:普通表格;
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.0pt;
font-family:"Times New Roman";
mso-fareast-font-family:"Times New Roman";
mso-ansi-language:#0400;
mso-fareast-language:#0400;
mso-bidi-language:#0400;}
</style>
<![endif]-->
该函数获得有关指定窗口的信息,
函数也获得在额外窗口内存中指定偏移地址的
32
位长整型值。
LONG GetWindowLong(HWND hWnd,int nindex);
hwnd:
窗口句柄及间接给出的窗口所属的窗口类。
函数功能:该函数获得有关指定窗口的信息,函数也获得在额外窗口内存中指定偏移位地址的
32
位度整型值。
函数原型:
LONG GetWindowLong
(
HWND hWnd
,
int nlndex
);
参数:
hWnd:
窗口句柄及间接给出的窗口所属的窗口类。
nlndex
:指定要获得值的大于等于
0
的值的偏移量。有效值的范围从
0
到额外窗口内存空间的字节数一
4
例如,若指定了
12
位或多于
12
位的额外类存储空间,则应设为第三个
32
位整数的索引位
8
。要获得任意其他值,指定下列值之一:
GWL_EXSTYLE
;获得扩展窗日风格。
GWL_STYLE
:获得窗口风格。
GWL_WNDPROC
:获得窗口过程的地址,或代表窗口过程的地址的句柄。必须使用
GWL_WNDPROC
函数调用窗口过程。
GWL_HINSTANCE
:获得应用事例的句柄。
GWL_HWNDPAAENT
:如果父窗口存在,获得父窗口句柄。
GWL_ID:
获得窗口标识。
GWL_USERDATA
:获得与窗口有关的
32
位值。每一个窗口均有一个由创建该窗口的应用程序使用的
32
位值。
在
hWnd
参数标识了一个对话框时也可用下列值:
DWL_DLGPROC
:获得对话框过程的地址,或一个代表对话框过程的地址的句柄。必须使用函数
CallWindowProc
来调用对话框过程。
DWL_MSGRESULT
:获得在对话框过程中一个消息处理的返回值。
DWL_USER
:获得应用程序私有的额外信息,例如一个句柄或指针。
返回值:如果函数成功,返回值是所需的
32
位值;如果函数失败,返回值是
0
。若想获得更多错误信息请调用
GetLastError
函数。
备注:通过使用函数
RegisterClassEx
将结构
WNDCLASSEX
中的
cbWndExtra
单元指定为一个非
0
值来保留额外类的存储空间。
1. CListCtrl
样式及设置
2.
扩展样式设置
3.
数据插入
4.
一直选中Item
5.
选中和取消选中Item
6.
得到CListCtrl
中所有行的checkbox
的状态
7.
得到CListCtrl
中所有选中行的序号
8.
得到item
的信息
9.
得到CListCtrl
的所有列的header
字符串内容
10.
使CListCtrl
中一项可见,即滚动滚动条
11.
得到CListCtrl
列数
12.
删除所有列
13.
得到单击的CListCtrl
的行列号
14.
判断是否点击在CListCtrl
的checkbox
上
15.
右键点击CListCtrl
的item
弹出菜单
16. CListCtrl
进行大数据量更新时,避免闪烁
!时间仓促,此播客内容大多为网上整理,特向原作者表示感谢!
--------------------------------------------------------------------------------
1. CListCtrl
样式及设置
LVS_ICON:
每个item
显示大图标
LVS_SMALLICON:
每个item
显示小图标
LVS_LIST:
显示一列带有小图标的item
LVS_REPORT:
显示item
详细资料
如windows
资源管理器,“
查看”
标签下的“
大图标,小图标,列表,详细资料”
LONG lStyle;
lStyle=GetWindowLong(m_ListCtrl.m_hWnd, GWL_STYLE); //
获取当前窗口style
lStyle &= ~LVS_TYPEMASK; //
清除显示方式位
lStyle |= LVS_REPORT; //
设置style
SetWindowLong(m_ListCtrl.m_hWnd, GWL_STYLE, lStyle); //
设置style
--------------------------------------------------------------------------------
2.
扩展样式设置
DWORD dwStyle = m_ListCtrl.GetExtendedStyle(); //
获取当前扩展样式
dwStyle |= LVS_EX_FULLROWSELECT; //
选中某行使整行高亮(report
风格时)
dwStyle |= LVS_EX_GRIDLINES; //
网格线(report
风格时)
dwStyle |= LVS_EX_CHECKBOXES; //item
前生成checkbox
控件
m_ListCtrl.SetExtendedStyle(dwStyle); //
设置扩展风格
--------------------------------------------------------------------------------
3.
数据插入
m_ListCtrl.InsertColumn(0,"
名称",LVCFMT_LEFT,50); //
插入列
m_ListCtrl.InsertColumn(1,"
备注",LVCFMT_LEFT,50);
//
直接插入:
int nRow=m_ListCtrl.InsertItem(0,
"VC++"); //
插入行
m_ListCtrl.SetItemText(nRow,1,"Visual C++ 6.0"); //
设置数据
//LVITEM
结构插入:
LVITEM item={0};
item.iItem=0; //
行号
item.mask=LVIF_TEXT; ;
item.cchTextMax=15
;//
插入字符串长度
item.pszText="Visual C++ 6.0";
int nRow=m_ListCtrl.InsertItem(&item);
m_ListCtrl.SetItemText(nRow,1,"Visual C++
6.0");
--------------------------------------------------------------------------------
4.
一直选中Item
选中style
中的 Show selection always,
或者添加扩展样式 LVS_SHOWSELALWAYS
--------------------------------------------------------------------------------
5.
选中和取消选中Item
int nIndex = 0;
//
选中
m_ListCtrl.SetItemState(nIndex,LVIS_SELECTED
LVIS_FOCUSED,LVIS_SELECTED|LVIS_FOCUSED);
//
取消选中
m_ListCtrl.SetItemState(nIndex,0,LVIS_SELECTED|LVIS_FOCUSED);
--------------------------------------------------------------------------------
6.
得到CListCtrl
中所有行的checkbox
的状态
CString str;
for(int i=0; i<m_ListCtrl.GetItemCount(); i++)
{
if(m_ListCtrl.GetItemState(i, LVIS_SELECTED)==
LVIS_SELECTED || m_ListCtrl.GetCheck(i))
{
str.Format(_T("
第%d
行的checkbox
为选中状态"), i);
AfxMessageBox(str);
}
}
--------------------------------------------------------------------------------
7.
得到CListCtrl
中所有选中行的序号
//
方法一:
CString str;
for(int i=0; i<m_ListCtrl.GetItemCount(); i++)
{
if(m_ListCtrl.GetItemState(i, LVIS_SELECTED) ==
LVIS_SELECTED )
{
str.Format(_T("
选中了第%d
行"), i);
AfxMessageBox(str);
}
}
//
方法二:
POSITION pos=m_ListCtrl.GetFirstSelectedItemPosition();
if(pos==NULL)
TRACE0("No items were selected!/n");
else
{
while(pos)
{
int nItem=m_ListCtrl.GetNextSelectedItem(pos);
TRACE1("Item %d was selected!/n",
nItem);
//
添加其他操作
}
}
--------------------------------------------------------------------------------
8.
得到item
的信息
TCHAR szBuf[1024];
LVITEM lvi;
lvi.iItem = nItemIndex;
lvi.iSubItem = 0;
lvi.mask = LVIF_TEXT;
lvi.pszText = szBuf;
lvi.cchTextMax = 1024;
m_ListCtrl.GetItem(&lvi);
关于得到设置item
的状态,还可以参考msdn
文章
Q173242: Use Masks to Set/Get Item States in CListCtrl
http://support.microsoft.com/kb/173242/en-us
--------------------------------------------------------------------------------
9.
得到CListCtrl
的所有列的header
字符串内容
LVCOLUMN lvcol;
char str[256];
int nColNum;
CString strColumnName[3];//
假如有3
列
nColNum = 0;
lvcol.mask = LVCF_TEXT;
lvcol.pszText = str;
lvcol.cchTextMax = 256;
while(m_list.GetColumn(nColNum, &lvcol))
{
strColumnName[nColNum] = lvcol.pszText;
nColNum++;
}
--------------------------------------------------------------------------------
10.
使CListCtrl
中一项可见,即滚动滚动条
m_ListCtrl.EnsureVisible(i, FALSE);
--------------------------------------------------------------------------------
11.
得到CListCtrl
列数
int nHeadNum=m_ListCtrl.GetHeaderCtrl()->GetItemCount();
--------------------------------------------------------------------------------
12.
删除所有列
方法一:
while(m_ListCtrl.DeleteColumn(0))
//
因为你删除了第一列后,后面的列会依次向上移动。
方法二:
int nColumns = 3; //
列数
for(int i=nColumns-1; i>=0; i--)
m_ListCtrl.DeleteColumn(i);
--------------------------------------------------------------------------------
13.
得到单击的CListCtrl
的行列号
添加listctrl
控件的NM_CLICK
消息相应函数
void CMyDlg::OnClickList1(NMHDR* pNMHDR, LRESULT* pResult)
{
//
方法一:
DWORD dwPos=GetMessagePos();
CPoint point( LOWORD(dwPos), HIWORD(dwPos));
m_ListCtrl.ScreenToClient(&point);
LVHITTESTINFO lvinfo;
lvinfo.pt=point;
lvinfo.flags=LVHT_ABOVE;
int nItem=m_ListCtrl.SubItemHitTest(&lvinfo);
if(nItem!=-1)
{
CString strtemp;
strtemp.Format("
单击的是第%d
行第%d
列",
lvinfo.iItem, lvinfo.iSubItem);
AfxMessageBox(strtemp);
}
//
方法二:
NM_LISTVIEW* pNMListView=(NM_LISTVIEW*)pNMHDR;
if(pNMListView->iItem!=-1)
{
CString strtemp;
strtemp.Format("
单击的是第%d
行第%d
列",
pNMListView->iItem, pNMListView->iSubItem);
AfxMessageBox(strtemp);
}
*pResult = 0;
}
--------------------------------------------------------------------------------
14.
判断是否点击在CListCtrl
的checkbox
上
添加listctrl
控件的NM_CLICK
消息相应函数
void CMyDlg::OnClickList1(NMHDR* pNMHDR, LRESULT* pResult)
{
DWORD dwPos=GetMessagePos();
CPoint point(LOWORD(dwPos), HIWORD(dwPos));
m_ListCtrl.ScreenToClient(&point);
LVHITTESTINFO lvinfo;
lvinfo.pt=point;
lvinfo.flags=LVHT_ABOVE;
UINT nFlag;
int nItem=m_ListCtrl.HitTest(point, &nFlag);
//
判断是否点在checkbox
上
if(nFlag==LVHT_ONITEMSTATEICON)
{
AfxMessageBox("
点在listctrl
的checkbox
上");
}
*pResult = 0;
}
--------------------------------------------------------------------------------
15.
右键点击CListCtrl
的item
弹出菜单
添加CListCtrl
控件的NM_RCLICK
消息相应函数
void CMyDlg::OnRclickList1(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_LISTVIEW* pNMListView=(NM_LISTVIEW*)pNMHDR;
if(pNMListView->iItem!=-1)
{
DWORD dwPos = GetMessagePos();
CPoint point( LOWORD(dwPos), HIWORD(dwPos) );
CMenu menu;
VERIFY( menu.LoadMenu( IDR_MENU1 ) );
CMenu* popup = menu.GetSubMenu(0);
ASSERT( popup != NULL );
popup->TrackPopupMenu(TPM_LEFTALIGN |
TPM_RIGHTBUTTON,
point.x, point.y, this );
}
*pResult = 0;
}
--------------------------------------------------------------------------------
16. CListCtrl
进行大数据量更新时,避免闪烁
m_ListCtrl.SetRedraw(FALSE);
//
更新内容
m_ListCtrl.SetRedraw(TRUE);
m_ListCtrl.Invalidate();
m_ListCtrl.UpdateWindow();
LVS_TYPEMASK
是
LVS_ICON+LVS_SMALLICON+LVS_LIST+LVS_REPORT
四种风格的集合。这样当我们用当前的风格
“
和
”“not LVS_TYPEMASK”
就等于清除了当前的显示风格。
分享到:
相关推荐
《动手学深度学习v2》.pdf
LINUX学习学习2LINUX学习学习2LINUX学习学习2LINUX学习学习2LINUX学习学习2LINUX学习学习2LINUX学习学习2LINUX学习学习2LINUX学习学习2
erlang学习2.pdferlang学习erlang学习2.erlang学习2.pdfpdf2.pdferlang学习2erlang学习2.pdf.pdf
微服务学习微服务学习微服务学习微服务学习2
数字化学习2-案例学习1.pptx
S2深入.NET平台指导学习2,完整的源代码,值得参考
S2,.net,C#,指导学习2 S2,.net,C#,指导学习2 S2,.net,C#,指导学习2 S2,.net,C#,指导学习2 S2,.net,C#,指导学习2S2,.net,C#,指导学习2S2,.net,C#,指导学习2S2,.net,C#,指导学习2S2,.net,C#,指导学习2
深入,NET,指导学习2,S2 深入,NET,指导学习2,S2 深入,NET,指导学习2,S2 深入,NET,指导学习2,S2 深入,NET,指导学习2,S2 深入,NET,指导学习2,S2 深入,NET,指导学习2,S2
windchill学习2windchill学习2windchill学习2windchill学习2windchill学习2windchill学习2windchill学习2
S2指导学习2--汽车租凭系统.rar S2指导学习2--汽车租凭系统.rar
天池python学习2
学习2.elk
斯坦福大学公开课讲义机器学习2英语版本基础入门
css合成学习2css合成学习2
VC学习2-我们学习VC的心得与体会,里面附有源程序与交流用的PPT.
android基础学习2
Accp5.0的指导学习2继承多态,仅供参考。
Linux学习2.pptx
java学习2,是个不错的资源,得好好学习了
sql学习 分区类型学习2_list单字段分区.sql