当前位置:   article > 正文

MFC ListControl使用总结 设置背景,双击修改值_mfc listctrl on_en_killfocus

mfc listctrl on_en_killfocus

前言

现需要使用一个8*5的表格输入参数。

添加控件

如下图所示,使用了一个List control(ID: IDC_LIST_PARAM),一个Edit control(ID: IDC_EDIT_PARAM, 属性中visible改为false)以及一个static text.
其中List control用来显示表格,Edit control用来辅助编辑List control中的内容。
在这里插入图片描述

为控件添加变量及事件处理程序

为List control添加control类型变量m_paramList,添加NM_DBLCLK处理程序(相应双击事件)。
为Edit control添加control类型变量m_paramEdit,添加EN_KILLFOCUS处理程序。

代码部分

在对应窗口类添加私有成员。

private:
	// 参数输入窗口双击后获得的横纵坐标
	int m_Row;
	int m_Col;
  • 1
  • 2
  • 3
  • 4

在窗口类源文件添加代码,我的窗口类名为CImageSimDlg。

//双击更改某一项的值
//双击获取所选编辑框的横纵坐标,将一个edit控件移动到此处进行输入
//通过后续的OnEnKillfocusEditParam()传递函数并处理
void CImageSimDlg::OnNMDblclkListParam(NMHDR *pNMHDR, LRESULT *pResult)
{
	LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<NMITEMACTIVATE*>(pNMHDR);
	// TODO: 在此添加控件通知处理程序代码
	*pResult = 0;
	NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
	CRect rc;

	m_Row = pNMListView->iItem;//获得选中的行
	m_Col = pNMListView->iSubItem;//获得选中列
	int n = m_paramList.GetItemCount();//获取当前一共多少行
	if (pNMListView->iSubItem < 7) //如果选择的是子项;
	{
		m_paramList.GetSubItemRect(m_Row, m_Col, LVIR_LABEL, rc);//获得子项的RECT;
		m_paramEdit.SetParent(&m_paramList);//转换坐标为列表框中的坐标
		m_paramEdit.MoveWindow(rc);//移动Edit到RECT坐在的位置;
		m_paramEdit.SetWindowText(m_paramList.GetItemText(m_Row, m_Col));//将该子项中的值放在Edit控件中;
		m_paramEdit.ShowWindow(SW_SHOW);//显示Edit控件;
		m_paramEdit.SetFocus();//设置Edit焦点
		m_paramEdit.ShowCaret();//显示光标
		m_paramEdit.SetSel(-1);//将光标移动到最后
		if (m_Row == n - 1)
		{
			m_paramList.InsertItem(m_Row + 1, _T(""));
		}
	}
	*pResult = 0;
}

void CImageSimDlg::OnEnKillfocusEditParam()
{
	// TODO: 在此添加控件通知处理程序代码
	CString tem;
	m_paramEdit.GetWindowText(tem); //得到用户输入的新的内容
	m_paramList.SetItemText(m_Row, m_Col, tem); //设置编辑框的新内容
	m_paramEdit.ShowWindow(SW_HIDE); //应藏编辑框
}

// 输入参数List初始化函数
void CImageSimDlg::InitListParam()
{
	// 创建一个空的图标,目的是简单的控制行高度
	CImageList imagelist_Dis;
	imagelist_Dis.Create(1, 24, ILC_COLOR, 1, 1); 

	m_paramList.SetImageList(&imagelist_Dis, LVSIL_SMALL);

	// 修改风格和扩展风格
	LONG lStyle_Dis = GetWindowLong(m_paramList.m_hWnd, GWL_STYLE);	// 获取当前窗口风格
	lStyle_Dis &= ~LVS_TYPEMASK;												// 清除显示方式位 
	lStyle_Dis |= LVS_REPORT;													// 设置报表风格
	SetWindowLong(m_paramList.m_hWnd, GWL_STYLE, lStyle_Dis);		// 设置窗口风格

	DWORD dwStyle_Dis = m_paramList.GetExtendedStyle();

	// 选中某行使整行高亮(只适用于报表风格的listctrl)
	dwStyle_Dis |= LVS_EX_FULLROWSELECT;
	dwStyle_Dis |= LVS_EX_GRIDLINES;											// 网格线(只适用与报表风格的listctrl)
	dwStyle_Dis |= LVS_EX_FLATSB;
	dwStyle_Dis |= LVS_EX_DOUBLEBUFFER;
	m_paramList.SetExtendedStyle(dwStyle_Dis);						// 设置扩展风格

	m_paramList.SetBkColor(RGB(166, 202, 240));						// 设置背景颜色
	m_paramList.SetTextBkColor(RGB(166, 202, 240));					// 设置文本背景颜色
	m_paramList.SetTextColor(RGB(0, 0, 0));							// 设置文本颜色

	// 设备信息参数表建立
	LV_COLUMN col_Dis;
	col_Dis.mask = LVCF_FMT|LVCF_SUBITEM|LVCF_TEXT|LVCF_WIDTH;
	col_Dis.fmt = LVCFMT_CENTER;
	col_Dis.iSubItem = 0;
	col_Dis.pszText = _T("数据类型");
	col_Dis.cx = 60;
	m_paramList.InsertColumn(0, &col_Dis);
	// 每列宽度
	int colLen[5] = {100, 100, 100, 100, 100};
	m_paramList.InsertColumn(1, _T("数据个数/行"), LVCFMT_CENTER, colLen[0]);
	m_paramList.InsertColumn(2, _T("行数"), LVCFMT_CENTER, colLen[1]);
	m_paramList.InsertColumn(3, _T("行空闲数"), LVCFMT_CENTER, colLen[2]);
	m_paramList.InsertColumn(4, _T("帧空闲"), LVCFMT_CENTER, colLen[3]);
	m_paramList.InsertColumn(5, _T("图像个数"), LVCFMT_CENTER, colLen[4]);

	// 插入行
	CString Line;
	for(int i=1;i<=10;i++)
	{
		Line.Format(_T("%d"), i);
		m_paramList.InsertItem(i, Line, 0);
	}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93

InitListParam函数在窗口初始化时调用。最后效果如下:
在这里插入图片描述

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号