第09章基本控件使用(一)_第1頁
第09章基本控件使用(一)_第2頁
第09章基本控件使用(一)_第3頁
第09章基本控件使用(一)_第4頁
第09章基本控件使用(一)_第5頁
已閱讀5頁,還剩74頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、第第9章章 基本控件使用基本控件使用(一一)第第9章章 基本控件使用基本控件使用(一一) 第第9章章 基本控件使用基本控件使用(一一)第第9章章 基本控件使用基本控件使用(一一) 9.1 編輯框類編輯框類9.2 菜單類菜單類9.3 滾動條類滾動條類第第9章章 基本控件使用基本控件使用(一一)基本控件基本控件靜態(tài)圖片靜態(tài)圖片編輯框編輯框按鈕按鈕單選框單選框列表框列表框垂直滾動條垂直滾動條進展條進展條熱鍵熱鍵樹形視圖樹形視圖動畫動畫日期選擇日期選擇IPIP地址地址擴展組合框擴展組合框控件的選擇控件的選擇 靜態(tài)文本靜態(tài)文本 組框組框 復選框復選框 組合框組合框 水平滾動條水平滾動條 旋轉按鈕旋轉按鈕

2、 滑動條滑動條 列表視圖列表視圖 標簽標簽 復合編輯復合編輯 月歷月歷 用戶定制控件用戶定制控件 控件控件工具欄工具欄第第9章章 基本控件使用基本控件使用(一一)9.1 編輯框類編輯框類第第9章章 基本控件使用基本控件使用(一一)9.1.1 編輯框類的結構及其方法編輯框類的結構及其方法 MFC在類在類CEdit中提供標準的中提供標準的Windows編輯框控件服務。編輯框控件服務。 CEdit是是CWnd類直接派生來的,具有類直接派生來的,具有CWnd的所有功能。的所有功能。 編輯框控件的默認模式是在一行顯示所有編輯文本。編輯框控件的默認模式是在一行顯示所有編輯文本。 CCmdTarget CO

3、bject CWnd CEdit第第9章章 基本控件使用基本控件使用(一一)CEdit類:類:class CEdit : public CWndDECLARE_DYNAMIC(CEdit)/ Constructorspublic:CEdit();BOOL Create(DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID);/ AttributesBOOL CanUndo() const;int GetLineCount() const;BOOL GetModify() const;void SetModify(BOOL

4、 bModified = TRUE);void GetRect(LPRECT lpRect) const;DWORD GetSel() const;void GetSel(int& nStartChar, int& nEndChar) const;HLOCAL GetHandle() const;void SetHandle(HLOCAL hBuffer);第第9章章 基本控件使用基本控件使用(一一)#if (WINVER = 0 x400)void SetMargins(UINT nLeft, UINT nRight);DWORD GetMargins() const;voi

5、d SetLimitText(UINT nMax);UINT GetLimitText() const;CPoint PosFromChar(UINT nChar) const;int CharFromPos(CPoint pt) const;#endif/ NOTE: first word in lpszBuffer must contain the size of the buffer!int GetLine(int nIndex, LPTSTR lpszBuffer) const;int GetLine(int nIndex, LPTSTR lpszBuffer, int nMaxLen

6、gth) const;/ Operationsvoid EmptyUndoBuffer();BOOL FmtLines(BOOL bAddEOL);void LimitText(int nChars = 0);int LineFromChar(int nIndex = -1) const;int LineIndex(int nLine = -1) const;int LineLength(int nLine = -1) const;void LineScroll(int nLines, int nChars = 0);第第9章章 基本控件使用基本控件使用(一一)void ReplaceSel(

7、LPCTSTR lpszNewText, BOOL bCanUndo = FALSE);void SetPasswordChar(TCHAR ch);void SetRect(LPCRECT lpRect);void SetRectNP(LPCRECT lpRect);void SetSel(DWORD dwSelection, BOOL bNoScroll = FALSE);void SetSel(int nStartChar, int nEndChar, BOOL bNoScroll = FALSE);BOOL SetTabStops(int nTabStops, LPINT rgTabS

8、tops);void SetTabStops();BOOL SetTabStops(const int& cxEachStop); / takes an int/ Clipboard operationsBOOL Undo();void Clear(); void Copy(); void Cut(); void Paste();BOOL SetReadOnly(BOOL bReadOnly = TRUE);int GetFirstVisibleLine() const;TCHAR GetPasswordChar() const;/ Implementationpublic:virtu

9、al CEdit();CEdit 類的通用方法類的通用方法 方法方法 說明說明 CanUndo() 決定一個編輯操作是否可以撤銷決定一個編輯操作是否可以撤銷 Clear() 從編輯控件中刪除當前的選擇從編輯控件中刪除當前的選擇(如果有的話如果有的話) Copy() 將編輯控件當前的選擇以將編輯控件當前的選擇以 CF_TEXT 格式復制到剪貼板中格式復制到剪貼板中 Cut() 剪下編輯控件中的當前選擇并以剪下編輯控件中的當前選擇并以 CF_TEXT 格式復制到剪貼板中格式復制到剪貼板中 EmptyUndoBuffer() 消除一個編輯控件的“撤銷”標志消除一個編輯控件的“撤銷”標志 GetFir

10、stVisibleLine() 確定編輯控件中的最上面的可視行確定編輯控件中的最上面的可視行 GetModify() 確定一個編輯控件的內容是否可修改確定一個編輯控件的內容是否可修改 GetPasswordChar() 當用戶輸入文本時,獲得編輯控件中顯示的密碼字符當用戶輸入文本時,獲得編輯控件中顯示的密碼字符 GetRect() 獲得一個編輯控件的格式化矩形獲得一個編輯控件的格式化矩形 GetSel() 獲得編輯控件中當前選擇的開始和結束字符位置獲得編輯控件中當前選擇的開始和結束字符位置 LimitText() 限定用戶可能輸入一編輯控件的文本長度限定用戶可能輸入一編輯控件的文本長度 Lin

11、eFromChar() 獲得包含指定字符下標的行的行號獲得包含指定字符下標的行的行號 LineLength() 獲得編輯控件中的一行的長度獲得編輯控件中的一行的長度 LineScroll() 滾動多行編輯控件的文本滾動多行編輯控件的文本 Paste() 將剪貼板的數(shù)據(jù)插入到編輯控件作當前的光標位置, 只有當前剪貼板將剪貼板的數(shù)據(jù)插入到編輯控件作當前的光標位置, 只有當前剪貼板中數(shù)中數(shù)據(jù)格式為據(jù)格式為 CF_TEXT 時方可插入時方可插入 ReplaceSel() 用指定文本替代編輯控件中當前選擇的部分用指定文本替代編輯控件中當前選擇的部分 SetModify() 設置或清除編輯控件的修改標志設

12、置或清除編輯控件的修改標志 SetPasswordChar() 當用戶輸入文本時設置或刪除一個顯示于編輯控件中的密碼字符當用戶輸入文本時設置或刪除一個顯示于編輯控件中的密碼字符 SetReadOnly() 將編輯控件設置為只讀狀態(tài)將編輯控件設置為只讀狀態(tài) SetSel() 在編輯控件中選擇字符的范圍在編輯控件中選擇字符的范圍 Undo() 取消最后一個編輯控件操作取消最后一個編輯控件操作 第第9章章 基本控件使用基本控件使用(一一)CEdit控件的樣式控件的樣式 樣式宏樣式宏 說說 明明 ES_AUTOHSCROLL 當用戶在行尾輸入一個字符時,文本自動向右滾動當用戶在行尾輸入一個字符時,文本

13、自動向右滾動 10 個字符,當用個字符,當用戶接受戶接受 Enter 鍵時,控件文本滾動回到零位置鍵時,控件文本滾動回到零位置 ES_AUTOVSCROLL 當用戶在最后一行按當用戶在最后一行按 Enter 鍵時,自動將文本向上滾動一頁鍵時,自動將文本向上滾動一頁 ES_CENTER 在多行編輯器中將文本置中在多行編輯器中將文本置中 ES_LEFT 將文本左對齊將文本左對齊 在編輯框控件中輸入時,自動將所有字符轉換成小寫在編輯框控件中輸入時,自動將所有字符轉換成小寫 ES_MULTILINE 指定編輯框控件是一個多行編輯框控件指定編輯框控件是一個多行編輯框控件(默認時為單行默認時為單行) ES

14、_NOHIDESEL 不不做編輯框控件的默認動作,該動作是:當控件失去輸入光標時,隱做編輯框控件的默認動作,該動作是:當控件失去輸入光標時,隱藏所選文本,當控件接受輸入光標時,顯示所有文本藏所選文本,當控件接受輸入光標時,顯示所有文本 ES_NUMBER 只允許在編輯框控件中輸入數(shù)字只允許在編輯框控件中輸入數(shù)字 ES_OEMCONVERT 當應用程序調用當應用程序調用 Windows API 函數(shù)函數(shù) AnsiToOem()將一個編輯框控件將一個編輯框控件中的中的 ANSI 字符轉換成字符轉換成 OEM 字符串時,通過將控件中輸入的字符串時,通過將控件中輸入的 ANSI字符集轉換成字符集轉換成

15、 OEM 字符集再轉回到字符集再轉回到 ANSI,確保適當?shù)淖址D換,確保適當?shù)淖址D換,這種樣式在包含文件名的編輯框控件中非常有用這種樣式在包含文件名的編輯框控件中非常有用 ES_PASSWORD 將 編 輯 框 控 件 中 的 所 有 輸 入 的 字 符 以 “將 編 輯 框 控 件 中 的 所 有 輸 入 的 字 符 以 “* ” 顯 示 , 可 以 用” 顯 示 , 可 以 用SetPasswordChar()方法來設置顯示不同字符方法來設置顯示不同字符 ES_READONLY 防止用戶在編輯框控件中輸入或編輯文本防止用戶在編輯框控件中輸入或編輯文本 ES_RIGTH 在單行編輯框控件

16、中文本右對齊在單行編輯框控件中文本右對齊 ES_UPPERCASE 在編輯框控件中輸入時,自動將所有字符轉換成大寫字符在編輯框控件中輸入時,自動將所有字符轉換成大寫字符 ES_WAITRETURN 在一個對話框的單行編輯框控件中, 當用戶按在一個對話框的單行編輯框控件中, 當用戶按Enter鍵時插入回車符;鍵時插入回車符;如果不指定此樣式,則按如果不指定此樣式,則按Enter 鍵時,相當于按對話框的默認按鈕。鍵時,相當于按對話框的默認按鈕。此樣式對單行編輯框控件無效此樣式對單行編輯框控件無效 第第9章章 基本控件使用基本控件使用(一一)多行編輯所支持的多行編輯所支持的 CEdit 法法 方法方

17、法 說明說明 FmtLines() 設置在多行編輯控件中包含軟分行符設置在多行編輯控件中包含軟分行符 GetHandle() 獲得當前分配給一個多行編輯控件的內存的句柄獲得當前分配給一個多行編輯控件的內存的句柄 GetLine() 從一編輯控件中獲得一行文本從一編輯控件中獲得一行文本 GetLineCount() 獲得多行編輯控件的行數(shù)獲得多行編輯控件的行數(shù) LineIndex() 設置多行編輯控件中一行的字符下標設置多行編輯控件中一行的字符下標 SetHandle() 設置多行編輯控件將要用到的句柄內存句柄設置多行編輯控件將要用到的句柄內存句柄 SetRect() 設置多行編輯控件的格式化矩

18、形并更新控件設置多行編輯控件的格式化矩形并更新控件 SetRectNP() 設置多行編輯控件的格式設置多行編輯控件的格式化矩形并且不重繪控件窗口化矩形并且不重繪控件窗口 SetTabStops() 在多行編輯控件中設置制表在多行編輯控件中設置制表(tab)位位 當編輯框控件具有當編輯框控件具有ES_MULTILINE樣式樣式時,多行編輯框控時,多行編輯框控件支持在編輯窗口進行多行文本編輯。件支持在編輯窗口進行多行文本編輯。第第9章章 基本控件使用基本控件使用(一一)9.1.2 編輯框類的應用實例編輯框類的應用實例例例9-1 使用使用MFC AppWizard創(chuàng)建如圖所示的基于對話框的創(chuàng)建如圖所

19、示的基于對話框的應用程序,實現(xiàn)算術加、減、乘和除的運算。應用程序,實現(xiàn)算術加、減、乘和除的運算。第第9章章 基本控件使用基本控件使用(一一)1使用AppWizard建立應用程序框架( 1 ) 在 進 入在 進 入 V C + + 的 第 一 個 界 面 下 , 選 擇的 第 一 個 界 面 下 , 選 擇 M F C AppWizardexe,并設置工程名及其所在位置。,并設置工程名及其所在位置。第第9章章 基本控件使用基本控件使用(一一) 彈出彈出MFC AppWizard-Step 1對話框,如圖所示。選中對話框,如圖所示。選中Dialog based選項,其余的都采用默認選項。選項,其余

20、的都采用默認選項。 第第9章章 基本控件使用基本控件使用(一一)(2) MFC AppWizard建立了一個基于對話窗口的程序框架。建立了一個基于對話窗口的程序框架。對話框模板對話框模板控件工具欄控件工具欄布局工具欄布局工具欄默認標識符默認標識符對話框編輯器對話框編輯器第第9章章 基本控件使用基本控件使用(一一)基于對話框程序的執(zhí)行流程基于對話框程序的執(zhí)行流程 DoModal()函數(shù)的功能:當前函數(shù)的功能:當前只能運行此只能運行此模態(tài)對話框模態(tài)對話框,且停,且停止主窗口的運行,直到模態(tài)對止主窗口的運行,直到模態(tài)對話框退出,才允許主窗口運行。話框退出,才允許主窗口運行。 當在對話框上加載消息,即

21、我當在對話框上加載消息,即我們按一下按鈕,對話框就要做們按一下按鈕,對話框就要做出一定的回應。而這一功能就出一定的回應。而這一功能就交由交由Run()函數(shù)處理。函數(shù)處理。 第第9章章 基本控件使用基本控件使用(一一)模態(tài)對話框模態(tài)對話框定義定義CMyDlg dlg;時,對話框并沒有顯示,只是構造了一個時,對話框并沒有顯示,只是構造了一個CMyDlg類型的對象,直到用戶調用類型的對象,直到用戶調用DoModal(),對話框才會顯,對話框才會顯示出來。示出來。dlg.DoModal()后,顯示一個模態(tài)對話框,此時后,顯示一個模態(tài)對話框,此時DoModal()函數(shù)并函數(shù)并不返回,直到用戶關閉此對話框

22、時,不返回,直到用戶關閉此對話框時,DoModal才返回。才返回。CDialog:DoModal()的返回值為的返回值為IDOK,IDCANCEL。表明操作。表明操作者在對話框上選擇者在對話框上選擇“確認確認”或是或是“取消取消”按鈕。按鈕。IDOK ,IDCANCEL是宏。是宏。CMyDlg dlg;m_pMainWnd = &dlg;int nResponse = dlg.DoModal();if (nResponse = IDOK) /else if (nResponse = IDCANCEL)/第第9章章 基本控件使用基本控件使用(一一)補充:非模態(tài)對話框補充:非模態(tài)對話框 在

23、程序運行的過程中,若出現(xiàn)了非模態(tài)對話框,主窗口還在程序運行的過程中,若出現(xiàn)了非模態(tài)對話框,主窗口還可以發(fā)送消息??梢园l(fā)送消息。 點擊非模態(tài)對話框中的點擊非模態(tài)對話框中的OK按鈕,非模態(tài)對話框沒有銷毀,按鈕,非模態(tài)對話框沒有銷毀,只是隱藏了。若想點擊只是隱藏了。若想點擊OK按鈕時,非模態(tài)對話框也銷毀,按鈕時,非模態(tài)對話框也銷毀,那么那么CTestDialog類必須類必須重載重載其基類其基類CDialog的虛的虛函數(shù)函數(shù)OnOK(),在此函數(shù)里調用,在此函數(shù)里調用DestroyWindow()來銷毀此對話來銷毀此對話框。框。 /采用局部變量創(chuàng)建一個非模態(tài)對話框采用局部變量創(chuàng)建一個非模態(tài)對話框 CT

24、estDialog *pdlg = new CTestDialog(); pdlg -Create(IDD_DIALOG1); /創(chuàng)建一個非模態(tài)對話框創(chuàng)建一個非模態(tài)對話框 /IDD_DIALOG1為已經定義的對話框資源的為已經定義的對話框資源的ID號號 pdlg -ShowWindow(SW_SHOWNORMAL); /顯示非模態(tài)對話框顯示非模態(tài)對話框 第第9章章 基本控件使用基本控件使用(一一)2使用資源編輯器建立對話框(1) 生成生成“編輯框編輯框”控件控件 Controls的的“編輯框編輯框”按鈕上單擊鼠標左鍵,在對按鈕上單擊鼠標左鍵,在對話框編輯窗口上的話框編輯窗口上的“數(shù)據(jù)數(shù)據(jù)1”編

25、輯框的位置上,按編輯框的位置上,按下鼠標左鍵并拖動鼠標畫出一個大小合適的編輯下鼠標左鍵并拖動鼠標畫出一個大小合適的編輯框???。1)在編輯框上單擊鼠標右鍵,選擇在編輯框上單擊鼠標右鍵,選擇Properties,設置,設置對話框,輸入對話框,輸入ID。 第第9章章 基本控件使用基本控件使用(一一)(2)生成生成“Button”按鈕控件。按鈕控件。Controls的的“Button”按鈕上單擊鼠標左鍵,畫出一個按鈕上單擊鼠標左鍵,畫出一個大小合適的下壓式按鈕。大小合適的下壓式按鈕。在按鈕上單擊右鍵,選擇在按鈕上單擊右鍵,選擇Properties項,輸入控件的項,輸入控件的ID值和值和Caption屬

26、性。屬性。1) 控件的布局,對話框編輯器中提供了控件布局工具欄,控件的布局,對話框編輯器中提供了控件布局工具欄,可以自動地排列對話框內的控件,并改變控件的大小??梢宰詣拥嘏帕袑υ捒騼鹊目丶?,并改變控件的大小。第第9章章 基本控件使用基本控件使用(一一)按照上面的操作過程編輯其他按鈕和編輯框等對象的屬性按照上面的操作過程編輯其他按鈕和編輯框等對象的屬性對象對象IDCaption或說明或說明編輯框編輯框IDC_ITEM1_EDIT計算數(shù)據(jù)計算數(shù)據(jù)1編輯框編輯框IDC_ITEM2_EDIT計算數(shù)據(jù)計算數(shù)據(jù)2編輯框編輯框IDC_RESULT_EDIT計算結果計算結果按鈕按鈕IDC_ADD_BUTTON

27、+按鈕按鈕IDC_DIFFERENCE_BUTTON-按鈕按鈕IDC_MULTIPLY_BUTTON*按鈕按鈕IDC_DEVIDE_BUTTON/按鈕按鈕IDC_CLEAR_BUTTONClear(清除清除)按鈕按鈕IDC_EXIT_BUTTONExit(退出退出)靜態(tài)文本靜態(tài)文本IDC_STATIC數(shù)據(jù)數(shù)據(jù)1靜態(tài)文本靜態(tài)文本IDC_STATIC數(shù)據(jù)數(shù)據(jù)2靜態(tài)文本靜態(tài)文本IDC_STATIC結果結果第第9章章 基本控件使用基本控件使用(一一)3添加代碼(1) 給編輯框連接變量。在給編輯框連接變量。在“數(shù)據(jù)數(shù)據(jù)l”編輯框上單擊鼠標右鍵,編輯框上單擊鼠標右鍵,快捷菜單中選擇快捷菜單中選擇Class

28、Wizard菜單項菜單項,彈出,彈出MFC ClassWizard對話框,選擇對話框,選擇Member Variables選項卡。選項卡。 以下給出多種方法的實現(xiàn):以下給出多種方法的實現(xiàn):ID變量變量變量類型變量類型IDC_ITEM1_EDITm_Item1_EditintIDC_ITEM2_EDITm_Item2_EditintIDC_RESULT_EDITm_Result_Editint方法一方法一第第9章章 基本控件使用基本控件使用(一一)(2) 給給“+”按鈕連接代碼。在按鈕連接代碼。在“+”按鈕上單擊鼠標右鍵,選擇按鈕上單擊鼠標右鍵,選擇ClassWizard菜單項菜單項,選擇,選擇

29、Messages Maps選項卡選項卡,然后在,然后在Object IDs列表框中選擇列表框中選擇IDC_ADD_BUTTON,在,在Messages列表框中選擇列表框中選擇BN_CLICKED項,即選擇單擊按鈕事件。項,即選擇單擊按鈕事件。 第第9章章 基本控件使用基本控件使用(一一)void CMyDlg:OnAddButton() UpdateData(TRUE); /將控件的狀態(tài)傳給其關聯(lián)的變量將控件的狀態(tài)傳給其關聯(lián)的變量 m_Result_Edit =m_Item1_Edit+m_Item2_Edit; UpdateData(FALSE); /將控件關聯(lián)變量的值傳給控件并改變控件狀態(tài)

30、將控件關聯(lián)變量的值傳給控件并改變控件狀態(tài)void CMyDlg:OnClearButton() m_Item1_Edit0;/清除內容清除內容m_Item2_Edit0; /清除內容清除內容m_Result_Edit= 0; /清除內容清除內容UpdateData(FALSE); void CMyDlg:OnExitButton() OnOK(); / 退出應用程序退出應用程序UpdateData刷新當前對話框刷新當前對話框 ,是控件和數(shù),是控件和數(shù)據(jù)(據(jù)(value類型的變量)的雙向通道類型的變量)的雙向通道第第9章章 基本控件使用基本控件使用(一一)ID變量變量變量類型變量類型IDC_IT

31、EM1_EDITm_Item1_EditintIDC_ITEM2_EDITm_Item2_EditintIDC_RESULT_EDITm_Result_EditCString方法二方法二void CMyDlg:OnAddButton() UpdateData(TRUE); /將控件的狀態(tài)傳給其關聯(lián)的變量將控件的狀態(tài)傳給其關聯(lián)的變量int Result=m_Item1_Edit+m_Item2_Edit;m_Result_Edit.Format(%d, Result); /或或 _gcvt(Result,10,cBuffer); m_Result_Edit=(LPCTSTR)cBuffer; U

32、pdateData(FALSE); /將控件關聯(lián)變量的值傳給控件并改變控件狀態(tài)將控件關聯(lián)變量的值傳給控件并改變控件狀態(tài)void CMyDlg:OnClearButton() m_Item1_Edit0;/清除內容清除內容m_Item2_Edit0; /清除內容清除內容m_Result_Edit= ; / 清空內容(清空內容(string類型)類型)UpdateData(FALSE); 第第9章章 基本控件使用基本控件使用(一一)void CMyDlg:OnAddButton() UpdateData(TRUE); /將控件的狀態(tài)傳給其關聯(lián)的變量將控件的狀態(tài)傳給其關聯(lián)的變量float Resul

33、t=atof(m_Item1_Edit)+atof(m_Item2_Edit); /將字符串轉換成浮點型將字符串轉換成浮點型m_Result_Edit.Format(%g, Result); UpdateData(FALSE); /用控件關聯(lián)變量用控件關聯(lián)變量將窗口中的內容更新將窗口中的內容更新ID變量變量變量類型變量類型IDC_ITEM1_EDITm_Item1_EditCStringIDC_ITEM2_EDITm_Item2_EditCStringIDC_RESULT_EDITm_Result_EditCString方法三方法三void CMyDlg:OnClearButton() m_I

34、tem1_Edit_T( );/清除內容清除內容m_Item2_Edit_T( ); /清除內容清除內容m_Result_Edit= _T( ); / 清空內容(清空內容(string類型)類型)UpdateData(FALSE); 第第9章章 基本控件使用基本控件使用(一一)Format函數(shù)函數(shù)Format函數(shù):返回按指定方式格式化一個數(shù)組常量的字符形式。函數(shù):返回按指定方式格式化一個數(shù)組常量的字符形式。% 索引索引 : - 寬度寬度 . 摘要摘要 類型類型Format(x=%d, 12); /x=12 /最普通最普通Format(x=%3d, 12); /x= 12 /指定寬度指定寬度Fo

35、rmat(x=%f, 12.0); /x=12.00 /浮點數(shù)浮點數(shù)Format(x=%g,02.200); /x=2.2 g /對應浮點型,且將值中多余的數(shù)去掉對應浮點型,且將值中多余的數(shù)去掉Format(x=%.3f, 12.0); /x=12.000 /指定小數(shù)指定小數(shù)Format(x=%8.2f12.0) / x= 12.00 ;Format(x=%.*f, 5, 12.0); /x=12.00000 /動態(tài)配置動態(tài)配置Format(x=%.5d, 12); /x=00012 /前面補充前面補充0Format(x=%.5x, 12); /x=0000C /十六進制十六進制Format(

36、x=%1:d%0:d, 12, 13); /x=1312 /使用索引使用索引Format(x=%p, nil); /x=00000000 /指針指針Format(x=%1.1e, 12.0); /x=1.2E+001 /科學記數(shù)法科學記數(shù)法Format(x=%, ); /x=% /得到得到%S := Format(%s%d, S, I); /S := S + StrToInt(I); /連接字符串連接字符串第第9章章 基本控件使用基本控件使用(一一)ID變量變量變量類型變量類型IDC_ITEM1_EDITm_Item1_EditCEditIDC_ITEM2_EDITm_Item2_EditCE

37、ditIDC_RESULT_EDITm_Result_EditCString方法四方法四第第9章章 基本控件使用基本控件使用(一一) 單擊單擊Add Function按鈕,在彈出的對話框中接受默認的名按鈕,在彈出的對話框中接受默認的名字。單擊字。單擊Edit Code按鈕,顯示源代碼文件,在函數(shù)按鈕,顯示源代碼文件,在函數(shù)OnAddButton()中輸入下列代碼:中輸入下列代碼:void CMyDlg:OnAddButton() char cstrItem110,cstrItem210; /定義字符串,存儲數(shù)據(jù)框中的值定義字符串,存儲數(shù)據(jù)框中的值double dfItem1,dfItem2,d

38、fResult;char cBuffer50; /定義字符串,存儲結果框中的值定義字符串,存儲結果框中的值m_Item1_Edit.GetWindowText(cstrItem1,10); /將編輯框的內容存到變量中將編輯框的內容存到變量中m_Item2_Edit.GetWindowText(cstrItem2,10);dfItem1=atof(LPCTSTR)cstrItem1);/將字符串轉換成浮點型將字符串轉換成浮點型dfItem2=atof(LPCTSTR)cstrItem2);dfResult=dfItem1+dfItem2; /加法加法_gcvt(dfResult,10,cBuff

39、er); /將結果轉成字符串存在將結果轉成字符串存在cBufferm_Result_Edit=(LPCTSTR)cBuffer; /cBuffer值顯示在結果編輯框中值顯示在結果編輯框中UpdateData(FALSE); /用控件關聯(lián)變量用控件關聯(lián)變量將窗口中的內容更新將窗口中的內容更新字符數(shù)目字符數(shù)目方法四方法四CWnd:GetWindowTextint GetWindowText( LPTSTR lpszStringBuf, int nMaxCount ) const;void GetWindowText( CString& rString ) const;m_Result_Ed

40、it.Format(%g, dfResult);第第9章章 基本控件使用基本控件使用(一一)說明說明char *_gcvt(double valuse, int digits, char *buffer); /把一個浮點值轉換成一個字符串把一個浮點值轉換成一個字符串,它存儲在緩沖區(qū)中。它存儲在緩沖區(qū)中。參數(shù)參數(shù): Value:被轉換的值被轉換的值 Digits:存儲的有效數(shù)字位數(shù)存儲的有效數(shù)字位數(shù) Buffer:結果的存儲位置結果的存儲位置gcvt函數(shù)把一個浮點值轉換成一個字符串函數(shù)把一個浮點值轉換成一個字符串(包括一個包括一個小數(shù)點小數(shù)點和可能的和可能的符號字節(jié)符號字節(jié))并存儲該字符串在并存

41、儲該字符串在buffer中。該中。該buffer應足夠大以便容納轉應足夠大以便容納轉換的值加上結尾的空格字符換的值加上結尾的空格字符,它是自動添加的。如果一個緩沖區(qū)的尺寸它是自動添加的。如果一個緩沖區(qū)的尺寸為為digits的尺寸的尺寸+1,該函數(shù)覆蓋該緩沖區(qū)的末尾。這是因為該函數(shù)覆蓋該緩沖區(qū)的末尾。這是因為轉換的字符轉換的字符串包括一個小數(shù)點以及可能包含符號和指數(shù)信息串包括一個小數(shù)點以及可能包含符號和指數(shù)信息。gcvt試圖以十進制格式產生試圖以十進制格式產生digits數(shù)字數(shù)字,如果不可能如果不可能,它以指數(shù)格式產生它以指數(shù)格式產生digits數(shù)字數(shù)字,在轉換時可能截除尾部的在轉換時可能截除尾

42、部的0。第第9章章 基本控件使用基本控件使用(一一)(3) 同樣可以給同樣可以給“-”、“*”和和“/”按鈕連接代碼,不同的是按鈕連接代碼,不同的是消息映像函數(shù)中執(zhí)行減、乘和除的操作。消息映像函數(shù)中執(zhí)行減、乘和除的操作?!?”的操作代碼如下:的操作代碼如下:void CMyDlg:OnDifferenceButton() char cstrItem110,cstrItem210;double dfItem1,dfItem2,dfResult;char cBuffer50;m_Item1_Edit.GetWindowText(cstrItem1,10);m_Item2_Edit.GetWindo

43、wText(cstrItem2,10);dfItem1=atof(LPCTSTR)cstrItem1);dfItem2=atof(LPCTSTR)cstrItem2);dfResult=dfItem1-dfItem2; /減法減法_gcvt(dfResult,10,cBuffer);m_Result_Edit=(LPCTSTR)cBuffer;UpdateData(FALSE);第第9章章 基本控件使用基本控件使用(一一)“*”的操作代碼如下:的操作代碼如下:void CMyDlg:OnMultiplyButton() char cstrItem110,cstrItem210;double d

44、fItem1,dfItem2,dfResult;char cBuffer50;m_Item1_Edit.GetWindowText(cstrItem1,10);m_Item2_Edit.GetWindowText(cstrItem2,10);dfItem1=atof(LPCTSTR)cstrItem1);dfItem2=atof(LPCTSTR)cstrItem2);dfResult=dfItem1*dfItem2; /乘法乘法_gcvt(dfResult,10,cBuffer);m_Result_Edit=(LPCTSTR)cBuffer;UpdateData(FALSE);第第9章章 基本

45、控件使用基本控件使用(一一)“/”的操作代碼如下:的操作代碼如下:void CMyDlg:OnDevideButton() char cstrItem110,cstrItem210;double dfItem1,dfItem2,dfResult;char cBuffer50;m_Item1_Edit.GetWindowText(cstrItem1,10);m_Item2_Edit.GetWindowText(cstrItem2,10);dfItem1=atof(LPCTSTR)cstrItem1);dfItem2=atof(LPCTSTR)cstrItem2);dfResult=dfItem1

46、/dfItem2; /除法除法_gcvt(dfResult,10,cBuffer);m_Result_Edit=(LPCTSTR)cBuffer;UpdateData(FALSE);第第9章章 基本控件使用基本控件使用(一一)(4) 給給“Clear”按鈕連接代碼:利用按鈕連接代碼:利用ClassWizard將按鈕消息將按鈕消息BN_CLICKED加到函數(shù)加到函數(shù)OnClearButton中,加入代碼中,加入代碼:void CMyDlg:OnClearButton() / TODO: Add your control notification handler code herem_Item1_

47、Edit.SetSel(0,-1);/選中編輯框選中編輯框IDC_EDIT1中的全部內容中的全部內容m_Item1_Edit.ReplaceSel( ); / 用空字符用空字符替換替換m_Item2_Edit.SetSel(0,-1);/選中編輯框中的全部內容選中編輯框中的全部內容m_Item2_Edit.ReplaceSel( ); / 用空字符用空字符替換替換m_Result_Edit= ; / 清空(清空(string類型)類型)UpdateData(FALSE); SetSel(start, end)/選擇字符的起始結束選擇字符的起始結束 m_ShowInfor.SetSel(0, -

48、1);/選擇全部選擇全部 m_ShowInfor.SetSel(-1, -1);/選擇最末尾選擇最末尾 第第9章章 基本控件使用基本控件使用(一一)ID變量變量變量類型變量類型IDC_ITEM1_EDITm_Item1_EditCEditIDC_ITEM2_EDITm_Item2_EditCEditIDC_RESULT_EDITm_Result_EditCEdit思考思考?void CMyDlg:OnAddButton() char cstrItem110,cstrItem210; /定義字符串定義字符串double dfItem1,dfItem2,dfResult;char cBuffer5

49、0;m_Item1_Edit.GetWindowText(cstrItem1,10); /將編輯框的內容存到變量中將編輯框的內容存到變量中m_Item2_Edit.GetWindowText(cstrItem2,10);dfItem1=atof(LPCTSTR)cstrItem1);/將字符串轉換成浮點型將字符串轉換成浮點型dfItem2=atof(LPCTSTR)cstrItem2);dfResult=dfItem1+dfItem2; /加法加法_gcvt(dfResult,10,cBuffer); /將結果轉換成字符串存儲在將結果轉換成字符串存儲在cBuffer? /cBuffer值顯示在

50、結果編輯框中值顯示在結果編輯框中m_Result_Edit.SetSel(0,-1); m_Result_Edit.ReplaceSel(cBuffer); /或:或:m_Result_Edit.SetWindowText(cBuffer);方法五方法五第第9章章 基本控件使用基本控件使用(一一)為按鈕增加快捷鍵為按鈕增加快捷鍵 在按鈕的標題相應字母前加在按鈕的標題相應字母前加&,操作時其快捷鍵為,操作時其快捷鍵為“shift+快捷字母快捷字母”第第9章章 基本控件使用基本控件使用(一一)9.2 菜單類菜單類 第第9章章 基本控件使用基本控件使用(一一)9.2.1 萊單萊單 菜單允許用

51、戶用一種標準的方法與菜單允許用戶用一種標準的方法與Windows應用程序進行應用程序進行交互:樣式一致的用戶界面對象交互:樣式一致的用戶界面對象菜單欄。菜單欄。 菜單一般存放在資源腳本中,在程序運行時才調用。一個菜單一般存放在資源腳本中,在程序運行時才調用。一個菜單項一般有兩個必要的部分,它們分別是菜單項一般有兩個必要的部分,它們分別是字符串名字符串名(如如file)和和整數(shù)標識符整數(shù)標識符。 一般來說,菜單的標識符一般來說,菜單的標識符ID在資源的頭文件在資源的頭文件(Resource.h)中定義,如:中定義,如:#define IDM_MENU1 129第第9章章 基本控件使用基本控件使用

52、(一一)9.2.2 菜單類的結構及其方法菜單類的結構及其方法 菜單類菜單類(CMenu)是從是從CObject類派生的。類派生的。 CMenu CObject第第9章章 基本控件使用基本控件使用(一一)CMenu的構造方法的構造方法第第9章章 基本控件使用基本控件使用(一一)菜單項菜單項操作方法是用來處理實際菜單項的,是對菜單操作操作方法是用來處理實際菜單項的,是對菜單操作方法的補充。方法的補充。第第9章章 基本控件使用基本控件使用(一一)9.2.3 菜單類的應用實例菜單類的應用實例例例9-2 給計算器應用程序添加如圖所示的菜單。給計算器應用程序添加如圖所示的菜單。第第9章章 基本控件使用基本

53、控件使用(一一)1菜單的設計(1) 選擇選擇 Insert/Resource命令,將顯示命令,將顯示Insert Resource(增加增加資源資源)對話框對話框.第第9章章 基本控件使用基本控件使用(一一)在資源文件在資源文件Menu中增加了一個菜單資源項中增加了一個菜單資源項 第第9章章 基本控件使用基本控件使用(一一)(2) 雙擊雙擊ID號,則顯示一個可編輯的菜單欄,該菜單欄的最號,則顯示一個可編輯的菜單欄,該菜單欄的最左邊是一個帶虛框的矩形框,這個矩形框表示最左邊的左邊是一個帶虛框的矩形框,這個矩形框表示最左邊的一個菜單項。一個菜單項。在資源文件在資源文件Menu中增加了一個菜單資源項

54、中增加了一個菜單資源項 第第9章章 基本控件使用基本控件使用(一一)(3) 雙擊矩形框,雙擊矩形框,VC+顯示一個顯示一個 Menu Item Properties(菜單屬菜單屬 性性)對話框。對話框。分割線分割線是否是否選中選中顯示顯示提示提示信息信息彈出彈出菜單菜單是否被是否被禁止禁止是否被是否被激活激活表示表示Alt和字母的和字母的組合快捷鍵組合快捷鍵第第9章章 基本控件使用基本控件使用(一一)菜單項對應的菜單項對應的ID分別為:分別為:CaptionID+ID_ADD_MENU-ID_DIFFERENCE _MENU*ID_MULTIPLY_MENU/ID_DEVIDE_MENUCle

55、arID_CLEAR_MENUAboutID_ABOUT_MENUExitID_EXIT_MENU第第9章章 基本控件使用基本控件使用(一一)2給菜單連接一個類(1) 在編輯狀態(tài)的菜單上,單擊鼠標右鍵在編輯狀態(tài)的菜單上,單擊鼠標右鍵/選中選中ClassWizard。顯示顯示ClassWizard對話框的同時,將顯示對話框的同時,將顯示Adding a Class對話框。對話框。該對話框詢問是增加一個新的類,還是選擇一個已經存在的該對話框詢問是增加一個新的類,還是選擇一個已經存在的類進行連接。這里要連接的類是與類進行連接。這里要連接的類是與Menu應用程序相關聯(lián)的對應用程序相關聯(lián)的對話框類話框類

56、CMyDlg,這個類已經存在,所以選擇圖中的,這個類已經存在,所以選擇圖中的Select an existing class對話框。對話框。第第9章章 基本控件使用基本控件使用(一一)(2)在在Select Class對話框中選擇對話框中選擇CMyDlg后單擊后單擊Select按鈕。按鈕。 第第9章章 基本控件使用基本控件使用(一一)3連接萊單和應用程序的主窗口(1)在在Menu的工作區(qū)的的工作區(qū)的Resource View選項卡中,雙擊選項卡中,雙擊Dialog文件夾中的文件夾中的IDD_MY_DIALOG,此時彈出,此時彈出IDD_MY_DIALOG對話框。對話框。(2) 在對話框的任何一

57、個空白域單擊鼠標右鍵,然后在彈出在對話框的任何一個空白域單擊鼠標右鍵,然后在彈出的快捷菜單中選擇的快捷菜單中選擇Properties命令。在對話框中的菜單命令。在對話框中的菜單組合框中選擇組合框中選擇IDR_MENU1。第第9章章 基本控件使用基本控件使用(一一)4給菜單項編寫代碼 在菜單在菜單IDR_MENU1上單擊鼠標右鍵,選擇上單擊鼠標右鍵,選擇ClassWizard。12345第第9章章 基本控件使用基本控件使用(一一)在在OnAddMenu()函數(shù)中輸入下列代碼:函數(shù)中輸入下列代碼:void CMyDlg:OnAddMenu() char cstrItem110,cstrItem21

58、0; /定義字符串定義字符串double dfItem1,dfItem2,dfResult;char cBuffer50;m_Item1_Edit.GetWindowText(cstrItem1,10); /將編輯框的內容存到變量中將編輯框的內容存到變量中m_Item2_Edit.GetWindowText(cstrItem2,10);dfItem1=atof(LPCTSTR)cstrItem1);/將字符串轉換成浮點型將字符串轉換成浮點型dfItem2=atof(LPCTSTR)cstrItem2);dfResult=dfItem1+dfItem2; /加法加法_gcvt(dfResult,

59、10,cBuffer); /將結果轉換成字符串存儲在將結果轉換成字符串存儲在cBufferm_Result_Edit=(LPCTSTR)cBuffer; /cBuffer值顯示在結果編輯框中值顯示在結果編輯框中UpdateData(FALSE); /將窗口中的內容更新將窗口中的內容更新方法一方法一第第9章章 基本控件使用基本控件使用(一一) 本例中,因為本例中,因為“+”菜單項的程序代碼和菜單項的程序代碼和“+”按鈕的程按鈕的程序代碼完全相同,所以可以簡化序代碼完全相同,所以可以簡化OnAddMenu()函數(shù)的函數(shù)的定義,此時函數(shù)的內容為:定義,此時函數(shù)的內容為:void CMyDlg:OnA

60、ddMenu() / TODO: Add your control notification handler code hereOnAddButton(); /直接調用定義好的函數(shù),執(zhí)行加法運算直接調用定義好的函數(shù),執(zhí)行加法運算方法二方法二思考思考:還有更簡單的方法嗎?還有更簡單的方法嗎?第第9章章 基本控件使用基本控件使用(一一) 用與上述類似的方法為用與上述類似的方法為Help菜單的菜單的About菜單項連接菜單項連接以下代碼:以下代碼:void CMyDlg:OnAboutMenu() / TODO: Add your control notification handler code hereMessageBox(“This is a cal

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論