⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 06.5.2 显示输入的字符.txt

📁 网上第一本以TXT格式的VC++深入详解孙鑫的书.全文全以TXT格式,并每一章节都分了目录,清晰易读
💻 TXT
字号:
6.5.2 显示输入的字符
如果当前用户输入的不是回车键的话,就应该在程序窗口中显示当前输入的字符。为了显示输入的字符,可以按照第五章中介绍的技巧来实现,即把输入的字符都保存到一个字符串中,然后在窗口中显示这个字符串就可以了。这样,我们就需要为视类添加一个 CString类型的成员变量,用来保存输入的字符。本例中定义的字符串成员变量为: 
m strLineo 
接着在视类构造函数中将这个变量初始化为空:
III-strLlne=""; 

然后在 OnChar函数中就可以把当前输入的字符先添加到 m strLine变量中,再利用 
CDC类的 TextOut函数在窗口  ( 0, 0 ) 位置处输出。具体代码如例 6-35所示,其中加灰显 
示的代码是新添的。  
i9116-35  

void CMenu2View : :OnChar(UINT  nChar ,  U工 NT  nRepCnt ,  U工 NT  nFlags)  
{  
// TOOO :  Add your message  handler  code  here and/ or  call default  
CClientDC  dc(this);  
工 f(OxOd  nChar)  
{  
if(O  ++m_n工 ndex  )  
{  

m_menu. CreatePopupMenu(); GetParent()->GetMenu()->AppendMenu(MF_POPUP , (UINT)m_menu.m_hMenu , "PhoneBook") ; GetParent()->OrawMenuBar() ; 
else 

ffi_strLine += nChar; 

dc.TextOut(O , O, ffi_strLine); } CView: :OnChar(nChar, nRepCnt , nFlags) ; 
Build并运行 Menu2程序,读者可以随意输入一行文字来测试一下,例如,输入以下这行文字: 
abc 12345678 
将会发现输入的文字在程序窗口中显示出来了,井当按下回车键后,将会发现程序的菜单栏上立即多了一个子菜单: PhoneBooko程序运行界面如图 6.45所示。 
图 6.45 Menu2程序运行结果之一

但是当再次输入字符时,发现字符是接着刚才那行文字输出的。这是因为程序中将输入的字符不断地添加到用来保存输入字符的字符串变量: m strLine中,这样它就会把以前
输入的内容也显示出来。正确的做法应该是在按下回车键后,将m s衍Line这个变量中的内容清空。修改后的代码如例6-36所示,加灰显示的部分是新添的。 
'Wtl6-36 

void CMenu2View : : OnChar(UINT nChar , UINT nRepCnt , UINT nFlags) 
{ // TODO: Add your message handler code here and/ or call default CClientDC dc(this); if(OxOd nChar) { 
if(O ++m_nIndex) { m_Menu.CreatePopupMenu(); GetParent()->GetMenu()->AppendMenu(MF_POPUP , (UINT)m_Menu.m_hMenu , .. PhoneBook" ) ; GetParent()->DrawMenuBar() ; 
m_strLine.Empty(); 
else 
m_strLine += nChar; 
dC . TextOut(O , O, m strLine); 

CView : : OnChar(nChar, nRepCnt , nFlags); 
再次测试Menu2程序,将会发现又出现一个问题:再次输入的文字是在上次输入的文字之上显示的,我们希望将土改显示的内容清除掉,再显示当前输入的文字。有多种方法可以实现窗口上文字的擦除,这里,我们利用窗口重绘这种方法来实现。 CWnd类有一个名为 Invalidate的成员函数,该函数的作用是让窗口的整个客户区无效,这样,当下一条 WM PAINT消息发生时,窗口就会被更新。这个函数的声明如下所示: 
void Invalidate( BOOL bErase = TRUE ); 
这个函数有一个 BOOL类型的参数,如果该参数的值是TR阻,窗口重绘时就会把窗口的背景擦除掉:否则,保留窗口的背景。该参数的默认值是TRUE。因此,本例中,可以在上述例 6-36所示代码中的 m_strLine.EmptyO代码之后加上下面这行代码,即给 Invalidate函数传递一个 TRUE值,让视类窗口重绘并擦除窗口的背景,这样,在显示新一行输入字符串时,窗口上己显示的上一次输入的文字己消失了。 
Invalidate() ; 
再次测试Menu2程序,可以发现当按下回车键后,先前输入的文字从窗口上消失了。接下来再输入字符时,窗口就会显示新的输入字符。

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -