手把手教你MFC編程計算器_第1頁
手把手教你MFC編程計算器_第2頁
手把手教你MFC編程計算器_第3頁
手把手教你MFC編程計算器_第4頁
手把手教你MFC編程計算器_第5頁
已閱讀5頁,還剩22頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、STEP 1 (頁面設(shè)計部分與控件添加部分)首先打開VC,選擇MFC AppWizardexe,設(shè)定好路徑和工程名(這里我設(shè)置工程名為為“My)。這里要注意的是在創(chuàng)建向?qū)Р襟E1的時候,我們選擇 基本對話框”。之后我們可以點擊完成便看到以下界面口工悴(D AtitU Sfi MLkd.工Sb 粗煙也 ma)工冋(D 旨世i耳邑*Q0 H :!.沁 叱吟網(wǎng)/ *N|粵|肄轉(zhuǎn)韓姑I曰$ m暮口r*ia;_ ?m. I C sn v u此時我們把當(dāng)前頁面上原配的控件按Delete全部清除(如下圖)豈建辟涌陽IT弧扎工程狙連眠齊馬3二總稱勘_ SCMYI)I【悩| 日理 mci!ilwTCMVDI|t*

2、 FH ;闔宙喰Add Member Variable也可以是在菜單欄中選擇查看”建立類向?qū)essageMrmher Variables Automstion | AdiveX Fvents | Cfss InfoErojct:Class Qame:CMyDlQOAAini2EDig 九丄加洙mg-cppControl IDs:TypeMemberJDC_BHTON3IDC_BUTTON4IDC0UTTONGIDCBUTTONGNUM?ICC0UTTONZ_NUM3IDC20inTON8_NUM4IDCBinTON3ZNUM5IDC EDI11duublcinnumlIDC EDITZdou

3、blemnumZjuc EDiraduublemresuJtIDC EDITSCEditm CHesultDtscripdun:這里我們把3個編輯框控件內(nèi)的變量都改變?yōu)閐ouble型的(因為進(jìn)行四則運算難免出現(xiàn)小數(shù)點)之后再在控件 IDC_EDIT3中選擇Add Variable并且數(shù)據(jù)類型選擇 Control類型 此時變量自動改為了CEdit類這步的意思是說我們把編輯框控件 3的設(shè)置為CEdit類并且設(shè)置一個成員對象是 m CResult。Member variable name!m_C ResultControl-Variable type:CEditTCategory;Descripti

4、on:m叩to CEditmember/STEP 2 (控件消息響應(yīng)函數(shù)具體代碼添加部分)首先從加法開始void CMyDlg:O nButto n1()/ TODO: Add your control notification handler code hereUpdateData(); double n_result;n_result = m_num1 + m_num2; m_result = n_result;char sz20; sprintf(sz,%f,m_result); m_CResult.SetWindowText(sz); UpdateData() 是 MFC 的窗口函數(shù),

5、用來刷新數(shù)據(jù)的由于我們進(jìn)行基本運算需要更新數(shù)據(jù) 所以必須添加這個函數(shù)。(可以認(rèn)為是必須的)n_result = m_num1 + m_num2;m_result = n_result;char sz20;sprintf(sz,%f,m_result);以上代碼是進(jìn)行 加法的基本語句,然后數(shù)組保存并格式化打印輸出。m_CResult.SetWindowText(sz); 此句是把結(jié)果輸出在之前用 CEdit 類創(chuàng)建的對象 m_CResult ,m_CResult 調(diào)用 SetWindowText(sz); 把結(jié)果顯示在編輯框中。無獨有偶 剩下的減法 乘法 和除法 也是大同小異(只是把 符號小改一

6、下便可 ) 這里貼出所有加減乘除的代碼void CMyDlg:OnButton1()/ TODO: Add your control notification handler code hereUpdateData();double n_result;n_result = m_num1 + m_num2;m_result = n_result;char sz20;sprintf(sz,%f,m_result);m_CResult.SetWindowText(sz);void CMyDlg:OnButton2()/ TODO: Add your control notification hand

7、ler code hereUpdateData();double n_result;n_result = m_num1 - m_num2;m_result = n_result;char sz20;sprintf(sz,%f,m_result); m_CResult.SetWindowText(sz);void CMyDlg:OnButton3()/ TODO: Add your control notification handler code hereUpdateData();double n_result;n_result = m_num1 * m_num2;m_result = n_r

8、esult;char sz20;sprintf(sz,%f,m_result);m_CResult.SetWindowText(sz);void CMyDlg:OnButton4()/ TODO: Add your control notification handler code hereUpdateData();double n_result;n_result = m_num1 / m_num2;m_result = n_result;char sz20;sprintf(sz,%f,m_result); m_CResult.SetWindowText(sz);poid CMyDlg:0nB

9、utton2() uold CMyDlg:0nButton3()/ TODU: AddcnntroL notiFicatlon hndlr code hereUpdat?Data();double n rpsult;n_result = m_nuni1 * n_ num?;n_rpsult = n_result;char ezJ20;sprintffszfresul t);n_CResult.SetWindowText(sz);void CMijDI.g:OnButton()點擊 “事件 ”- “選擇 EN_SETFOCU”S (這里程序默認(rèn)的響應(yīng)函數(shù)是OnsetfocusEdit1 )依次類

10、推我們也給編輯框2添加事件響應(yīng)函數(shù)OnsetfocusEdit2,方法同上如下圖nEditFlag = 0 ;設(shè)置好之后,我們還要做一些初始化工作,在程序運行之初,我們先初始化那么在哪里初始化呢?很簡單,正如大家想的一樣在On I ni tDialog()內(nèi)進(jìn)行初始化我們只需在OnlnitDialog()函數(shù)中加入一句nEditFlag = 0 ;便可以了 (如下圖黑條字體部分)/ ChlyDlg message handlersBOOL GIDlg; ;OnInitlLalag()CDialog : :Dnlnitt3Kog();nEditFlagi=/ Add ftbout * p men

11、u i ten tuneriu,/ IDM_ABOUTBdK uiiist 缸 in the system comnand range.ASSERT ( ( I DM_ABDUTBOK & 0xFFFfl = f IM_flBOUTBO?G);ftSSEBT( IDM_ftfi(JUT5O?; 0kFO(19);CMentJ* pSyshle-nu - GetSyste-mMertutFftLSE);if (卩Sy5Henu != HULL) fCString strfltJoutHpnu;s t r A bo u tMtnu. LoadStr Ing (1 BS_flBOllTBOX ):i

12、f ( TstrAboutNriu. isEnptyO)Appe*ndripnu(MF_SEFftflftT0R):autoinaticallypSy5Mfnu-App&ndhlpnu(MF_STRING, IOM_flBOUT0OX, strfiboutMenu):/ Set the ican For this dialos. The Frdmewarh does thisis not a dialog big icon snail icon/ 訓(xùn)Fiefi the application1 s main uindou Set I con(m_hI con, TRUE); SetSet I

13、con(n_hI con. FHLSE);H Set/ TDDO: Add extra Initialisation herereturn TRUE; ff return TRUE unless you set the Focus to a control/之后我們再為兩個事件響應(yīng)函數(shù)進(jìn)行OnsetfocusEditl ()和OnsetfocusEdit2 ()添加代joid CMyDlgi!0nS(?tFoeusEdit1()/ TODO: Add youF control notification handler code here nEditFlag - 1;void CIDlg::0n

14、SetfocusEdit2()t.U IODO: Add jour 匚ontrol notiFicatlnn handler code hre nEditFlq 二 2;當(dāng)用戶選定編輯框 1的時候,n EditFlag = 1;當(dāng)用戶選定編輯框 2的時候,nEditFlag = 2;而鼠標(biāo)消息WM_LBUTTONDOWN 具體代碼如下uoid:OnLButtonDon(liINr nFiCPoint pnint)J J TODO: Add ytiup nessago tiandl&r cud& her& and/or cll default ttiis-ptFocus();nEdi tFlaq

15、 = Q;CDilog;: OnLBut ton town (fi Flags, point);/STEP 3 (按鍵09的響應(yīng)部分)這里由于代碼都大同小異,所以就用數(shù)字按鈕1, 2來進(jìn)行簡要說明uoidz:DnRuttonNuril ()tn TODO: Add your ctintroL riotiFication handler UpdateData(TRUE);iff nEdltFlaq 1)n_iiun1=iiii_iiunii *1 a+1;else if( nEditFlag = 2)upddteData(FftLSE);code here用if語句去判斷標(biāo)記常量nEditFla

16、g從而給判斷是m_num1還是m_num2進(jìn)行操作這里m_num1是編輯框1內(nèi)的數(shù)字m num2是編輯框2內(nèi)的數(shù)字剩下了 39代碼以上大同小異。這里進(jìn)行一個說明m_num2=m_num2*10+1; 很多人會問這步是說明意思,這步乍看貌似有點一頭霧水(當(dāng)初我也是這樣)但是仔細(xì)看看還是能看明白的。比方說 用戶想打出自然數(shù) “234”用戶第一次 點的數(shù)字是 2 那么此時對應(yīng)代碼執(zhí)行是這段m_num2=m_num2*10+2; 那么 m_num2 = 0*10 +2 ( 初始化時 m_num2 = 0) 之后如果在點擊 3 的時候執(zhí)行的代碼是m_num2=m_num2*10+3; (此時經(jīng)過第一步

17、m_num2 已經(jīng)為 2 了,再點了 3 結(jié)果為 m_num2= 2*10+3 = 23)最后點擊 4 執(zhí)行的代碼是m_num2=m_num2*10+4; ( 23*10 +4=234 )通過以上小例子 大家明白了吧 為什么要 “先乘以 10 再加 數(shù)字/人家XP只有1個編輯框.)。最大的障礙就是唯獨是那個EN_SETFOCUS這個函數(shù)的空白了。我只單存的百度到GetFocus()能獲得焦點,但是其實問題遠(yuǎn)遠(yuǎn)并沒有那么簡單,涉及到很多問題。我當(dāng)初設(shè)置判斷的時候還不知道用一個EN_SETFOCUS,并且初始化標(biāo)記這個方法,過后才知道。我把之前的錯誤帖一下順便是當(dāng)作是一個警告void CMyDlg

18、:O nButto n14NumO()/ TODO: Add your con trol no tificati on han dler code here UpdateData(TRUE);if( GetDlgltem(IDC_EDIT1)-GetFocus()m_num仁m_nu m1*10+0;else if( GetDlgltem(IDC_EDIT2)-GetFocus()m_n um2=m_num2*10+0;UpdateData(FALSE);/分析GetDlgItem( )如果大家不熟悉的話 我可以先解釋一下是獲得編輯框首先 GetDlgItem(IDC_EDIT1) 獲取了 ID 為 IDC_EDIT1 也就是編輯框 CEdit 類的對象的指針, 繼承了 CWnd 類函數(shù) GetFocus 是 CWnd 中的靜態(tài)函數(shù),來看一下函數(shù)原型: static CWnd* PASCALGetFocus( ); 返回值是 CWnd* 類型的 ,也就是說如果當(dāng)前對話框或是控件被focus ,那么就返回這個對話框或控件的指針 .我錯誤的在 if 語句中將這個指針返回值當(dāng)作了判斷條件 ,

溫馨提示

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

最新文檔

評論

0/150

提交評論