?? 06.5.2 顯示輸入的字符.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 + -