VS2008, MFC view类中实现一个电话簿程序

功能为:往view窗口输入 信息(姓名  电话)然后回车,则在子菜单的菜单项增加一项。通过点击增加的菜单项,又可以显示 窗口输入的信息(姓名  电话)

 

1. 在View类中增加一个windows消息响应WM_CHAR,这样所有键盘的消息都会在OnChar消息响应函数中被捕获。实现函数 参看代码注释

void CxxxxView::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
	// TODO: 在此添加消息处理程序代码和/或调用默认值
	
	CClientDC dc(this);

	if(0x0d == nChar)
	{
		if(0 == ++m_nIndex)//m_nIndex 为view类 新增加的的成员变量,在构造函数中初始化为-1.
			               //第一次回车增加一个子菜单
		{
		    m_menu.CreatePopupMenu();//m_menu 为CMenu的对象 为view类新增的成员变量
			                         //创建弹出菜单
			GetParent()->GetMenu()->AppendMenuW(MF_POPUP,(UINT)m_menu.m_hMenu,L"PhoneBook");//在view类中获取属于框架类的菜单栏
			GetParent()->DrawMenuBar();//让框架类去刷新menu bar.
		}
		m_menu.AppendMenuW(MF_STRING,ID_ABC_PHONE1+m_nIndex,m_strLine.Left(m_strLine.Find(' ')));//往子菜单m_menu追加菜单项
		                                                                      //取空格' '左边的字符作为菜单项名字 
		                                                                      //ID_ABC_PHONE1为创建的第一个子菜单项ID
		m_strArray.Add(m_strLine);// m_strArray 为view类public, CStringArray 类型.(CSting的集合类)
		                          //保存回车后strLine上的串字符,所有的输入的字符串就保留在数组中了.
		m_strLine.Empty();//回车后清空之前的字符串
		Invalidate();//默认就是TRUE ,所以不用给参数。先前输入的内容会被擦除,视类窗口看不到。
	}
	else//增加子菜单项
	{
		m_strLine +=(char)nChar; //m_strLine是View类新增的CString成员对象,在构造函数中初始化为"";
		dc.TextOutW(0,0,m_strLine);//使用ClientDC 在0,0位置逐步输出
	}

	CView::OnChar(nChar, nRepCnt, nFlags);
}

2. 采用先在 资源视图 增加一个子菜单和子菜单的菜单项,然后给菜单项增加事件处理,最后删除的子菜单的方式(这种方式请自行理解) ,分别增加了4个OnAbcPhoneN (n=1,2,3,4)的响应函数;参看代码注释.


void Cvs2008_SX_JiaoCheng06_1View::OnAbcPhone1()
{
	// TODO: 在此添加命令处理程序代码
	CClientDC dc(this);
	dc.TextOutW(0,0,m_strArray.GetAt(0));//获取全局成员输出中保存的字符,通过dc打印出来
}

void Cvs2008_SX_JiaoCheng06_1View::OnAbcPhont2()
{
	// TODO: 在此添加命令处理程序代码
	CClientDC dc(this);
	dc.TextOutW(0,0,m_strArray.GetAt(1));//获取全局成员输出中保存的字符,通过dc打印出来。
}

void Cvs2008_SX_JiaoCheng06_1View::OnAbcPhone3()
{
	// TODO: 在此添加命令处理程序代码
	CClientDC dc(this);
	dc.TextOutW(0,0,m_strArray.GetAt(2));//获取全局成员输出中保存的字符,通过dc打印出来。
}

void Cvs2008_SX_JiaoCheng06_1View::OnAbcPhone4()
{
	// TODO: 在此添加命令处理程序代码
	CClientDC dc(this);
	dc.TextOutW(0,0,m_strArray.GetAt(3));//获取全局成员输出中保存的字符,通过dc打印出来。
}

 

注意:相关类及类成员 可以查看MSDN文件,还是有帮助的。

 

链接:https://pan.baidu.com/s/1UPpu61qQMQGk4kLjYl5WbQ 
提取码:a620

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值