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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章