VC++学习(6)案例——菜单编程 和 文本编程的综合应用小案例:电话本的案例

在这里插入图片描述

引出

VC++学习(6)案例——菜单编程 和 文本编程的综合应用小案例:电话本的案例

在这里插入图片描述


电话本案例

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

处理首次回车,增加菜单

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

开始没出现,鼠标滑动后才出来

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

处理其他字符输入

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

处理空格分割的姓名和电话

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在这里插入图片描述

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
在这里插入图片描述

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

void CTelBookView::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags) 
{
	// TODO: Add your message handler code here and/or call default
	// 捕获键盘消息
	// 首次输入,需要加入菜单,后面输入加入菜单项即可

	CClientDC dc(this);

	if(0x0d==nChar)
	{
		if(0==++m_nIndex) // 先自加后比较
		{
			m_menu.CreatePopupMenu();
			// 添加到菜单栏,view类获取框架类菜单指针:
			GetParent()->GetMenu()->AppendMenu(MF_POPUP,(UINT)m_menu.m_hMenu,"PhoneBook");
			// 菜单栏重绘
			GetParent()->DrawMenuBar();
		}
		// 增加菜单项
		m_menu.AppendMenu(MF_STRING,IDM_PHONE1 + m_nIndex ,m_str.Left(m_str.Find(' ')));

		m_strArray.Add(m_str);
		// 清除字符
		m_str.Empty();
		Invalidate();
	
	}else
	{	
		// 输出字符
		m_str+=nChar;
		dc.TextOut(0,0,m_str);
	}

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

void CTelBookView::OnPhone1() 
{
	// TODO: Add your command handler code here
	CClientDC dc(this);
	dc.TextOut(0,0,m_strArray.GetAt(0));
	
}

让框架类进行响应

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

增加虚函数

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

报错解决:源文件单独编译,要包含头文件

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

/
// CMainFrame message handlers


BOOL CMainFrame::OnCommand(WPARAM wParam, LPARAM lParam) 
{
	// TODO: Add your specialized code here and/or call the base class
	int MenuCmdId = LOWORD(wParam);

	// 如果是自己定义的IDM_PHONE1 ~ 之间
	CTelBookView *view = (CTelBookView*) GetActiveView();  
	if(MenuCmdId >= IDM_PHONE1 && MenuCmdId<IDM_PHONE1 + view->m_strArray.GetSize())
	{
		// MessageBox("Test");
		CClientDC dc(view);
		dc.TextOut(0,0,view->m_strArray.GetAt(MenuCmdId-IDM_PHONE1));

		return TRUE;
	}

	return CFrameWnd::OnCommand(wParam, lParam);
}

总结

VC++学习(6)案例——菜单编程 和 文本编程的综合应用小案例:电话本的案例


其他

第五讲 文本编程

新建项目

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

输入线的初始化

输入的竖直线,一闪一闪的输入

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

增加Windows消息处理

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

根据字体大小定义插入符大小

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

int CTextView::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
	if (CView::OnCreate(lpCreateStruct) == -1)
		return -1;
	
	// TODO: Add your specialized creation code here

	// 确定符号大小
	CClientDC dc(this); // 当前设备描述表describe
	TEXTMETRIC tm;
	dc.GetTextMetrics(&tm); // 取地址符

	// 创建一个插入符号
	CreateSolidCaret(tm.tmAveCharWidth/8,tm.tmHeight);
	ShowCaret(); // 显示出来

	return 0;
}

创建图形插入符

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

文字始终保存在窗口中

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

CString类

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

/
// CTextView drawing

void CTextView::OnDraw(CDC* pDC)
{
	CTextDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	// TODO: add draw code for native data here

	// CString
	CString str("pet");
	pDC->TextOut(50,50,str);

}

通过字符串资源

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

/
// CTextView drawing

void CTextView::OnDraw(CDC* pDC)
{
	CTextDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	// TODO: add draw code for native data here

	// CString
	CString str("pet");
	pDC->TextOut(50,50,str);

	// 使用字符串资源
	str.LoadString(IDS_PET);
	pDC->TextOut(0,200,str);


}

路径层

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

字符输入的功能

键盘输入消息

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

鼠标左键消息

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

void CTextView::OnLButtonDown(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default

	// 移动插入符到这里
	SetCaretPos(point);
	m_strLine.Empty(); // 将cstring中保存的内容情空
	CView::OnLButtonDown(nFlags, point);
}

保存点击位置的坐标

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

输入回车键的处理

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

删除文字的实现

将文本的颜色设置成和背景色一样

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

字符输入功能代码

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

1.鼠标左键定位插入字符位置;

2.特殊字符的处理,回车键,删除键;

3.光标随着输入的字符移动;

void CTextView::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags) 
{
	// TODO: Add your message handler code here and/or call default

	// 字体的高度
	CClientDC dc(this);
	TEXTMETRIC tm;
	dc.GetTextMetrics(&tm);


	printf("%u\n", nChar);

	if(0x0d==nChar) // 输入的是回车
	{
		m_strLine.Empty(); // 清空
		m_ptOrig.y += tm.tmHeight; // 到下一行

	}else if(0x08==nChar) // 输入的是删除
	{
		// 获取背景色,文本颜色设置成背景色
		COLORREF clr = dc.SetTextColor(dc.GetBkColor());
		// 然后输出
		dc.TextOut(m_ptOrig.x,m_ptOrig.y,m_strLine);

		// 减少字符,再次输出
		m_strLine = m_strLine.Left(m_strLine.GetLength()-1);
		dc.SetTextColor(clr); 

	}else // 输入其他
	{
		m_strLine += nChar;

	}

	// 插入符随着输入移动
	CSize sz = dc.GetTextExtent(m_strLine);
	
	CPoint pt;
	pt.x = m_ptOrig.x + sz.cx;
	pt.y = m_ptOrig.y;
	SetCaretPos(pt);

	dc.TextOut(m_ptOrig.x,m_ptOrig.y,m_strLine);
	CView::OnChar(nChar, nRepCnt, nFlags);
}

void CTextView::OnLButtonDown(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default

	// 移动插入符到这里
	SetCaretPos(point);
	m_strLine.Empty(); // 将cstring中保存的内容情空
	m_ptOrig = point;  // 保存坐标值
	CView::OnLButtonDown(nFlags, point);
}

字体的修改

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

vc++6.0中的字体

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Windows系统中的字体

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

	// 定义字体
	CFont font;
	font.CreatePointFont(300, "华文行楷", NULL);
	CFont *pOldFont = dc.SelectObject(&font);

模拟卡拉ok变色字体

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

void CTextView::OnTimer(UINT nIDEvent) 
{
	// TODO: Add your message handler code here and/or call default
	
	// 显示大小按5个像素增加
	m_nWidth += 5;

	CClientDC dc(this);

	// 字体的高度
	TEXTMETRIC tm;
	dc.GetTextMetrics(&tm);

	CRect rect;
	rect.left = 0;
	rect.top = 200;
	rect.right = m_nWidth;
	rect.bottom = rect.top + tm.tmHeight;

	// 改变文本颜色
	dc.SetTextColor(RGB(255,0,0));
	CString str;
	str.LoadString(IDS_PET);
	dc.DrawText(str,rect,DT_LEFT);


	rect.top=150;
	rect.bottom = rect.top + tm.tmHeight;
	dc.DrawText(str,rect,DT_RIGHT);

	// 判断一下,走到哪里了
	CSize sz = dc.GetTextExtent(str);
	if(m_nWidth>sz.cx)
	{
		m_nWidth = 0;
		dc.SetTextColor(RGB(0,255,0));
		dc.TextOut(0,200,str);
	}

	CView::OnTimer(nIDEvent);
}

第四讲 简单绘图

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

加入点击弹窗

框架类CMainFrame中加入不生效,需要在CDrawView中加入

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

编写代码,加入一个消息框

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在头文件中,自动加入了注释宏

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

源文件中加入了宏,加入了消息响应函数的宏

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

划线的实现1

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

鼠标的抬起与放下的事件定义

/
// CDrawView message handlers

void CDrawView::OnLButtonDown(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	// 点击的时候,拿到了点
	m_ptOrigin=point; // 获取起点
	// MessageBox("view click");
	CView::OnLButtonDown(nFlags, point);
}

void CDrawView::OnLButtonUp(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	HDC hdc; 
	hdc=::GetDC(m_hWnd);
	// 起点
	MoveToEx(hdc,m_ptOrigin.x,m_ptOrigin.y,NULL);
	// 划线
	LineTo(hdc,point.x,point.y);
	// 释放dc
	::ReleaseDC(m_hWnd,hdc);
	CView::OnLButtonUp(nFlags, point);
}

划线实现2

用cdc实现

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

划线的实现3,CClient

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

GetParent()

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

划线的实现4

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

	CWindowDC dc(GetParent());
	dc.MoveTo(m_ptOrigin);
	dc.LineTo(point);

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

不同的颜色画笔

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

	// 创建画笔
	CPen pen(PS_DOT,1,RGB(255,0,0));
	CClientDC dc(this);
	CPen *pOldPen=dc.SelectObject(&pen);
	dc.MoveTo(m_ptOrigin);
	dc.LineTo(point);
	dc.SelectObject(pOldPen); // 先前的画笔选择回设备描述表

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

不同颜色画刷

	// 创建画刷
	CBrush brush(RGB(255,0,0)); 
	CClientDC dc(this);
	dc.FillRect(CRect(m_ptOrigin,point),&brush);

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

位图

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

	CBitmap bitmap;
	bitmap.LoadBitmap(IDB_BITMAP1);
	CBrush brush(&bitmap);
	CClientDC dc(this);
	dc.FillRect(CRect(m_ptOrigin,point),&brush);

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

空的矩形

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

画笔实现

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

构造函数初始化为false

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

鼠标按下时,设置为真,True

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

鼠标抬起,设置为false

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

画出连续的线条

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

void CDrawView::OnMouseMove(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default

	// 判断鼠标状态

	CClientDC dc(this);
	if(m_bDraw==TRUE)
	{
		// 开始划线
		dc.MoveTo(m_ptOrigin);
		dc.LineTo(point);
		m_ptOrigin=point; // 终点设置为起点
	}
	
	CView::OnMouseMove(nFlags, point);
}

换个红色的画笔

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

void CDrawView::OnMouseMove(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default



	CClientDC dc(this);
	// 换个颜色
	CPen pen(PS_SOLID,1,RGB(255,0,0));
	CPen *pOldPen=dc.SelectObject(&pen); // 之前的画笔

	// 判断鼠标状态
	if(m_bDraw==TRUE)
	{
		// 开始划线
		dc.MoveTo(m_ptOrigin);
		dc.LineTo(point);
		m_ptOrigin=point; // 终点设置为起点
	}
	
	dc.SelectObject(pOldPen); //设置回之前的画笔
	CView::OnMouseMove(nFlags, point);
}

画个扇形

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

先画出一个点,再到另一个点画出一条线,终点变化,重新划线

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

画出边线

void CDrawView::OnMouseMove(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default



	CClientDC dc(this);
	// 换个颜色
	CPen pen(PS_SOLID,1,RGB(255,0,0));
	CPen *pOldPen=dc.SelectObject(&pen); // 之前的画笔

	// 判断鼠标状态
	if(m_bDraw==TRUE)
	{
		// 开始划线
		dc.MoveTo(m_ptOrigin);
		dc.LineTo(m_ptOld); // 画出一个点
		// dc.MoveTo(m_ptOrigin); // 线性的扇形
		dc.MoveTo(m_ptOld); // 画出边线
		dc.LineTo(point);
		m_ptOld=point;
	}
	dc.SelectObject(pOldPen); //设置回之前的画笔
	CView::OnMouseMove(nFlags, point);
}

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • 28
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Arya's Blog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值