MFC部分控件简单使用

一.List Control列表控件(隶属于CListCtrl类)

1. CListCtrl 风格

LVS_ICON: //为每个item显示大图标
LVS_SMALLICON: //为每个item显示小图标
LVS_LIST: //显示一列带有小图标的item
LVS_REPORT: //显示item详细资料
	//直观的理解:windows资源管理器,“查看”标签下的“大图标,小图标,列表,详细资料”

2. 设置listctrl 风格及扩展风格

LONG lStyle;
lStyle = GetWindowLong(m_list.m_hWnd, GWL_STYLE);//获取当前窗口style
lStyle &= ~LVS_TYPEMASK; //清除显示方式位
lStyle |= LVS_REPORT; //设置style
SetWindowLong(m_list.m_hWnd, GWL_STYLE, lStyle);//设置style

DWORD dwStyle = m_list.GetExtendedStyle();
dwStyle |= LVS_EX_FULLROWSELECT;//选中某行使整行高亮(只适用与report风格的listctrl)
dwStyle |= LVS_EX_GRIDLINES;//网格线(只适用与report风格的listctrl)
dwStyle |= LVS_EX_CHECKBOXES;//item前生成checkbox控件
m_list.SetExtendedStyle(dwStyle); //设置扩展风格

3. 插入数据

m_list.InsertColumn( 0, "ID", LVCFMT_LEFT, 40 );//插入列
m_list.InsertColumn( 1, "NAME", LVCFMT_LEFT, 50 );
int nRow = m_list.InsertItem(0, "11");//插入行
m_list.SetItemText(nRow, 1, "jacky");//设置数据

4. 删除所有列

// 方法一:
while ( m_list.DeleteColumn (0))
//因为你删除了第一列后,后面的列会依次向上移动。

//方法二:
int nColumns = 4;
for (int i=nColumns-1; i>=0; i--)
m_list.DeleteColumn (i);

5. 单行删除(删除最后一行)

int n = 0;//全局变量,代表之前添加的行
if(n == 0)
{
	AfxMessageBox("列表中无项目,请添加");
	return FALSE;
}
n--;
m_list.DeleteItem(n);

6. 单行删除(删除选中行)

if(n == 0)
{
	AfxMessageBox("列表中无项目,请添加");
	return FALSE;
}
for(int i=0;i<m_list.GetItemCount();i++)
{
	if(m_list.GetItemState(i,LVIS_SELECTED) == LVIS_SELECTED || m_list.GetCheck(i))//复选框被选中或者该行被选中
	{
		m_list.DeleteItem(i);
		n--;
	}
}

二.ComboBox控件

1.在类向导中创建控件关联成员变量m_Combo,类型为CComboBox
  控件属性为下拉列表,并去掉分类属性(按照写入字串的顺序排序而非字母顺序)。
2.在初始化函数OnInitDialog()中添加控件初始化显示的内容
	m_Combo.AddString("汉族");
	m_Combo.AddString("其他");
//  ((CComboBox*)GetDlgItem(IDC_NATION))->AddString("另一种");//此方法也可以,但是不够简单
	m_Combo.SetCurSel(0);//初始化选择"汉族"
3.获取当前选择字串
	CString str;
	int nSel = m_Combo.GetCurSel();
	m_Combo.GetLBText(nSel,str);

代码

BOOL CListctrlDlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	//去掉CComboBox分类属性
	m_Nation.AddString("汉族");
	m_Nation.AddString("其他");
//  ((CComboBox*)GetDlgItem(IDC_NATION))->AddString("haiyou");//此方法也可以,但是不够简单
	m_Nation.SetCurSel(0);
	//	m_list.Create(LVS_REPORT,CRect(0,0,100,100),this,IDC_LIST);
	
	// Add "About..." menu item to system menu.
	AddList();
	// IDM_ABOUTBOX must be in the system command range.
	ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
	ASSERT(IDM_ABOUTBOX < 0xF000);
	
	CMenu* pSysMenu = GetSystemMenu(FALSE);
	if (pSysMenu != NULL)
	{
		CString strAboutMenu;
		strAboutMenu.LoadString(IDS_ABOUTBOX);
		if (!strAboutMenu.IsEmpty())
		{
			pSysMenu->AppendMenu(MF_SEPARATOR);
			pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
		}
	}
	
	// Set the icon for this dialog.  The framework does this automatically
	//  when the application's main window is not a dialog
	SetIcon(m_hIcon, TRUE);			// Set big icon
	SetIcon(m_hIcon, FALSE);		// Set small icon
	
	// TODO: Add extra initialization here
	
	return TRUE;  // return TRUE  unless you set the focus to a control
}

//列表属性要调成“报告”
BOOL CListctrlDlg::AddList()
{
	for(int i=0;i<10;i++)
	{
		m_list.DeleteColumn(i);
	}
	m_list.InsertColumn(0,"工号",LVCFMT_LEFT,60);
	m_list.InsertColumn(1,"姓名",LVCFMT_LEFT,70);
	m_list.InsertColumn(2,"部门",LVCFMT_LEFT,50);
	m_list.InsertColumn(3,"性别",LVCFMT_LEFT,50);
	m_list.InsertColumn(4,"学历",LVCFMT_LEFT,60);
	m_list.InsertColumn(5,"外语",LVCFMT_LEFT,60);
	m_list.InsertColumn(6,"民族",LVCFMT_LEFT,60);
	m_list.InsertColumn(7,"入职日期",LVCFMT_LEFT,100);
	//设置背景及风格
	m_list.SetExtendedStyle(LVS_EX_CHECKBOXES|LVS_EX_FULLROWSELECT|LVS_EX_HEADERDRAGDROP|LVS_EX_ONECLICKACTIVATE|LVS_EX_GRIDLINES);
	m_list.SetBkColor(RGB(220,240,240));     //设置背景颜色
	m_list.SetTextBkColor(RGB(220,240,240));//设置文字背景颜色
	m_list.SetTextColor(RGB(128,64,0));	 //设置文字颜色
	return TRUE;
}

//增加行的函数
BOOL CListctrlDlg::AddListItem()
{
	UpdateData();//更新数据,不添加此行,数据无法及时传递进来
	if(m_szName == ""||m_szNumber == ""||m_szBranch == "")
	{
		AfxMessageBox("不能有项为空,请填充后再添加!");
		return FALSE;
	}
	int nCount = m_list.GetItemCount();//获取当前已经存在的行数
	m_list.InsertItem(nCount,m_szNumber);
	m_list.SetItemText(nCount,1,m_szName);
	m_list.SetItemText(nCount,2,m_szBranch);
	m_list.SetItemText(nCount,3,m_nSex?"女":"男");
	
	char *p[]={"高中","大学","硕士","博士"};
	m_list.SetItemText(nCount,4,p[m_nEduca]);
	
	//对于复选框,选中为真,初始化都为FALSE(定义成员变量的时候在构造函数中已经初始化)
	CString str;
	if(m_bEngl)
		str += "英";
	if(m_bJapa)
		str += "日";
	if(m_bRuss)
		str += "俄";
	if(m_bKorea)
		str += "韩";
	if(str.IsEmpty())
		str += "无";
	m_list.SetItemText(nCount,5,str);
	
	int nSel = m_Nation.GetCurSel();
	m_Nation.GetLBText(nSel,str);
	m_list.SetItemText(nCount,6,str);

	str.Format("%d-%d-%d",m_dtJoin.GetYear(),m_dtJoin.GetMonth(),m_dtJoin.GetDay());
	m_list.SetItemText(nCount,7,str);
	
	//	++n;
	
	return TRUE;
}

//删除行的函数
BOOL CListctrlDlg::DeleteListItem()
{
	//	while ( m_list.DeleteColumn (0));	//删除列
	/*	if(n == 0)
	{
	AfxMessageBox("列表中无项目,请添加");
	return FALSE;
	}
	for(int i=0;i<m_list.GetItemCount();i++)
	{
	if(m_list.GetItemState(i,LVIS_SELECTED) == LVIS_SELECTED || m_list.GetCheck(i))//复选框被选中或者该行被选中
	{
	m_list.DeleteItem(i);
	n--;
	}
}*/
	POSITION pos = m_list.GetFirstSelectedItemPosition();
	if (pos == NULL)
	{
		AfxMessageBox("请先选择一行再删除!");
		return FALSE;
	}
	else
	{
		while (pos)
		{
			int nItem = m_list.GetNextSelectedItem(pos);
			m_list.DeleteItem(nItem);
		}
	}
	
	
	return TRUE;
}

//修改行内容
BOOL CListctrlDlg::ModListItem()
{
	POSITION pos = m_list.GetFirstSelectedItemPosition();
	if (pos == NULL)
	{
		AfxMessageBox("请先选择一行再修改!");
		return FALSE;
	}
	int nItem = m_list.GetNextSelectedItem(pos);
	UpdateData();
//	int nCount = m_list.GetItemCount();//获取当前已经存在的行数
	m_list.SetItemText(nItem,0,m_szNumber);
	m_list.SetItemText(nItem,1,m_szName);
	m_list.SetItemText(nItem,2,m_szBranch);
	m_list.SetItemText(nItem,3,m_nSex?"女":"男");
	
	char *p[]={"高中","大学","硕士","博士"};
	m_list.SetItemText(nItem,4,p[m_nEduca]);
	
	//对于复选框,选中为真,初始化都为FALSE(定义成员变量的时候在构造函数中已经初始化)
	CString str;
	if(m_bEngl)
		str += "英";
	if(m_bJapa)
		str += "日";
	if(m_bRuss)
		str += "俄";
	if(m_bKorea)
		str += "韩";
	if(str.IsEmpty())
		str += "无";
	m_list.SetItemText(nItem,5,str);
	
	int nSel = m_Nation.GetCurSel();
	m_Nation.GetLBText(nSel,str);
	m_list.SetItemText(nItem,6,str);

	str.Format("%d-%d-%d",m_dtJoin.GetYear(),m_dtJoin.GetMonth(),m_dtJoin.GetDay());
	m_list.SetItemText(nItem,7,str);
	return TRUE;
}

//增加行的按钮响应
void CListctrlDlg::OnAdd() 
{
	AddListItem();
}

//修改按键
void CListctrlDlg::OnMod() 
{
	ModListItem();
}

//删除行按钮响应
void CListctrlDlg::OnDeleteall() 
{
	DeleteListItem();	
}

//主要是为了添加是否关闭对话框消息
void CListctrlDlg::OnClose() 
{
	if(AfxMessageBox("是否关闭窗口?",MB_YESNO) == IDYES)
		CDialog::OnClose();
	else
		return;
}


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值