MFC学习
前言
本文记录工作中用到的MFC控件用法
一、常用控件
1.CLIstCtrl
接口 | 说明 |
---|---|
InsertColumn | 插入列 |
InsertItem | 插入行 |
SetItemText | 设置某行某列数据 |
GetItemText | 得到某行某列数据 |
DeleteAllItems | 清空所有行数据 |
SendMessage | 可以控制表格样式 |
GetNextItem | 得到选择行 |
CListCtrl可以当表格使用。
设置表格线:
CListCtrl list;
list.SendMessage(LVM_SETEXTENDEDLISTVIEWSTYLE, 0, LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES);
插入表头(列数据)
list.InsertColumn(0, _T("姓名"), LVCFMT_LEFT, 40);//第1列,左对齐,表格宽度40
list.InsertColumn(1, _T("性别"), LVCFMT_LEFT, 40);//第2列,左对齐,表格宽度40
//可以重新调整列宽
CRect rcGrid;
list.GetClientRect(&rcGrid);
int nWidth = rcGrid.Width();
list.SetColumnWidth(0, nWidth * 3 / 4);
list.SetColumnWidth(1, nWidth / 4);
插入行
list.InsertItem(0, _T("张三")); //第一行
list.SetItemText(0, 1, _T("男"));
获取选中行
int nRow = list.GetNextItem(-1, LVNI_SELECTED);
如果多选:
POSITION pos = ist.GetFirstSelectedItemPosition();
if (pos != NULL)
{
while (pos)
{
int nItem = ist.GetNextSelectedItem(pos);
...... //处理
}
}
指定选中行:
list.SetItemState(index,LVNI_FOCUSED | LVIS_SELECTED, LVNI_FOCUSED | LVIS_SELECTED); //设置行index为选中并高亮(如果未设置Focuse,被选中行会变为灰色)
另外,要使被选中行高亮显示,除了将item 的 state 和 stateMask 都设置LVNI_FOCUSED之外,还要将List Control控件的Always show selection属性设置为TRUE(默认为FALSE,也就是说当前选择的 item 在控件非激活状态下是不显示选中行的)。 经过以上修改,在打开对话框之后,指定item在List Control控件中显示为选中状态,但是背景色是灰色,因为打开的对话框焦点不在List Control控件上,因此需要在对话框类的OnInitDialog()中加一句list.SetFocus(),同时将return TRUE改为return FALSE来指示窗口不按照Tab顺序来指定焦点。
设置只读:
??
二、常见问题
总结
持续更新…