孙鑫教程第六章实现电话本的问题

来源:互联网 发布:网络播放器多少钱 编辑:程序博客网 时间:2024/05/21 10:01

直接上代码


void CPhonebookView::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)

{
CClientDC dc(this);
if( 0x0d == nChar )
{
if( 0 == ++m_nIndex )
{
m_menu.CreateMenu();
GetParent()->GetMenu()->AppendMenu(MF_POPUP,(UINT)m_menu.m_hMenu,"Phonebook");
GetParent()->DrawMenuBar();
}

m_menu.AppendMenuA(MF_STRING,111,m_strLine.Left(m_strLine.Find( ' ',0)));
m_strLine.Empty();
Invalidate();
}
else
{

m_strLine += char(nChar);
dc.TextOutA(0,0,m_strLine);
}
CView::OnChar(nChar,nRepCnt,nFlags);

}

原书中代码是这样的,不直到你们执行后有没有发现phonebook菜单下总有一个空白的菜单项?

后经过实验发现,是因为在敲第一个回车时完成popup菜单的添加,这时候回车会停留在输入缓存里,然后紧接着使用如下代码

m_menu.AppendMenuA(MF_STRING,111,m_strLine.Left(m_strLine.Find( ' ',0)));

就添加了一个空白的菜单项


因此只需要在m_menu.AppendMenuA(MF_STRING,111,m_strLine.Left(m_strLine.Find( ' ',0)));的上一行添加if( 0 < m_nIndex )就可以了


原创粉丝点击