功能爲:往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