




已閱讀5頁,還剩78頁未讀, 繼續(xù)免費閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
C語言也能干大事 如鵬網(wǎng) C 語言也能干大事第一節(jié) 板書:1、 C 語言不是只能開發(fā)黑底白字的控制臺界面程序。學(xué)習(xí)本課的基礎(chǔ):本課程不講 C 語言基礎(chǔ)知識,C 語言考及格,學(xué)的過程中配合復(fù)習(xí),有不懂的回去翻書。 2、 學(xué)完本課程以后同學(xué)們做的一些作品賞析:計算器、俄羅斯方塊、音樂播放器、 學(xué)生管理系統(tǒng)(/forum/thread-2487-1-1.html ),郵件客 戶端(/forum/thread-3697-1-1-uid7.html ),Web 論壇( /forum/thread-3991-1-1-uid7.html )可以開發(fā)游戲、網(wǎng)絡(luò) 程序、網(wǎng)站程序等。C 語言什么都可以開發(fā) 3、 準備工作,安裝 VC6(在網(wǎng)上搜“Visual C+ 6”,找合適的地址下載)。VC6 在 Vista、Windows 下啟動可能有兼容性提示。 3、開始做第一個 C 語言的程序 【文件】【新建】,打開【工程】選項頁,選擇【W(wǎng)in32 Application】 (不要選錯了),在“位置”中修改工程保存的路徑。(以前用 Tubor C 的同學(xué) 會問“什么叫工程?”。在以前大家用 TurboC 寫的程序一般也就是一個文件, 但是用 C 語言寫大程序的時候不可能把所有的代碼都寫在一個文件中,肯定要寫 很多文件。“工程(Project)”就是這些文件的一個集合。)在“工程名”中寫 入你為這個工程取的名字,最好有一定意義。下一步【一個簡單的 Windows 程 序】4、向 Windows 的世界問好 MessageBox(NULL,TEXT(世界你好),TEXT(問好),MB_OK); VC6 在 Vista、Windows 下編譯調(diào)試時可能有兼容性提示。C語言也能干大事 如鵬網(wǎng) 5、學(xué)本課程常見問題 (1)為什么不用 TurboC? Turbo C(Win-TC)太老了,界面還是 DOS 界面,庫也是 DOS 的庫,沒有網(wǎng)絡(luò)開 發(fā)包、沒有 Windows 界面開發(fā)包。TC 只能用來學(xué) C 的基礎(chǔ),要進行實際開發(fā)必 須使用先進一點的工具。還是讓 TurboC 進博物館吧。 (2)為什么不用更高版本的 VC? 我們不使用高版本的 VC 主要是如下考慮:VC6 和高版本的 VC 沒 有本質(zhì)區(qū)別(VC6 是 1998 年的東西,大部分人、公司還是用 VC6,市面上的書 也都是用 VC6),只不過是升級了一下 C+的版本、STL 的版本而已,對咱們這 次學(xué)習(xí)沒有什么影響;VC6 的操作方式和 VC2008 非常相似,用熟了 VC6 再學(xué)高 版本的 VC 只用半小時而已;高版本的 VC 體積太大,要五六百兆,而上面給出 的 VC6 只有 100MB。VC2008 下建立工程。 (3)學(xué) C 語言還是學(xué)其他語言,用其他語言實現(xiàn)豈不是更好? 用最熟悉的語言深入編程的各個領(lǐng)域(網(wǎng)絡(luò)、數(shù)據(jù)庫、圖形學(xué)、內(nèi)核等), 一通百通,一切語言都是紙老虎。參考資料如鵬網(wǎng)首頁。 6、深入研究 MessageBox (1)MessageBox(NULL,TEXT(世界你好),TEXT(問好),MB_OK); 第一個參數(shù)暫時不講;第二個是正文;第三個是標題(Caption); 第四個是類型。 MB_OK 就是表示有一個 OK 按鈕【確定】) TEXT 是一個宏,當(dāng)字符串中有中文的時候最好用 TEXT 來包圍這個字符串,雖然C語言也能干大事 如鵬網(wǎng) 不使用 TEXT 在 VC6 中沒問題,但是在 VC7 中有問題,而且微軟也建議使用 TEXT 宏,因此在涉及到中文的場合要使用它。他的作用就是把中文轉(zhuǎn)化成不會亂碼的 格式。(暫時這么認為)。_T(問好),其實_T 只是 TEXT 的一個縮寫而已。而 且_T 在有的低版本里不識別。TEXT()低版本也識別。暫時不用關(guān)心 TEXT 的細節(jié)。 換個樣子: MessageBox(NULL, TEXT(世界你好), TEXT(你好),MB_OKCANCEL); 可從設(shè)置希望在對話框中顯示的按鈕: #define MB_OK 0x00000000L #define MB_OKCANCEL 0x00000001L #define MB_ABORTRETRYIGNORE 0x00000002L #define MB_YESNOCANCEL 0x00000003L #define MB_YESNO 0x00000004L #define MB_RETRYCANCEL 0x00000005L 也可以設(shè)置對話框中顯示的圖標: #define MB_ICONHAND 0x00000010LC語言也能干大事 如鵬網(wǎng) #define MB_ICONQUESTION 0x00000020L #define MB_ICONEXCLAMATION 0x00000030L #define MB_ICONASTERISK 0x00000040L 比如:MessageBox(NULL, TEXT(世界你好) ,TEXT(你好), MB_ICONQUESTION); (2)可是如果我想顯示“確定、取消”按鈕的時候同時使用問號圖標呢? MessageBox(NULL, TEXT(世界你好), TEXT(你好),MB_OKCANCEL| MB_ICONQUESTION); MessageBox(NULL, TEXT(世界你好), TEXT(你好), MB_ABORTRETRYIGNORE | MB_ICONEXCLAMATION); (3)思考: 到這一步如果你只是在背誦“第一組和第二組中間放一個豎線就可以實現(xiàn) 兩種效果的組合形式”,那么你未來只會成為一個代碼工人。我們要思考一下其 背后的原理。 “|”是什么意思?“|”是位運算里的“或”運算,只有對應(yīng)的兩個二進位 有一位為 1 時,結(jié)果位才為 1 ,否則為 0。MB_OK、MB_OKCANCEL 等的低四位不 同,但是高位永遠為 0;MB_ICONHAND、MB_ICONQUESTION 等的低 5 至第 8 位 不同,而其他位永遠為 0。這樣“MB_OK、MB_OKCANCEL”組的數(shù)值與 “MB_ICONHAND、MB_ICONQUESTION”組的數(shù)值進行或運算后能分別保留各自 的部分,也就是在結(jié)果值中同時體現(xiàn)兩組的取值。 這種風(fēng)格叫“掩碼”,在 Windows 編程中這種用法會經(jīng)常用到。C語言也能干大事 如鵬網(wǎng) (4)返回值 MessageBox 是有返回值的,返回值為用戶點擊的按鈕: #define IDOK 1 #define IDCANCEL 2 #define IDABORT 3 #define IDRETRY 4 #define IDIGNORE 5 #define IDYES 6 #define IDNO 7 代碼: int ret = MessageBox(NULL, TEXT(你是人嗎?), TEXT(火星人), MB_YESNO | MB_ICONQUESTION); if(ret=IDYES)C語言也能干大事 如鵬網(wǎng) MessageBox(NULL, TEXT(火星人你好), TEXT(問好),MB_OK); else MessageBox(NULL, TEXT(歡迎回家來), TEXT(問好),MB_OK); 6、課后作業(yè):自己動手寫惡搞程序。 運行以后彈出詢問對話框(有【是】、【否】兩個按鈕以及問號圖標)“你 是好人嗎?”,如果點擊【是】,則彈出對話框(只有一個【確定】按鈕以及一 個警告圖標)“你看你就不像好人,點擊【確定】開始格式化 C 盤!”;如果點 擊【否】,則彈出對話框(有【重試】、【取消】兩個按鈕)“嘗試把你變成好 人失敗,是否重試?”。 別把教學(xué)視頻當(dāng)電影看!多練!多寫 C 語言也能干大事第二節(jié) 板書:C語言也能干大事 如鵬網(wǎng) 運行以后彈出詢問對話框(有【是】、【否】兩個按鈕以及問號圖標)“你 是好人嗎?”,如果點擊【是】,則彈出對話框(只有一個【確定】按鈕以及一 個警告圖標)“你看你就不像好人,點擊【確定】開始格式化 C 盤!”;如果點 擊【否】,則彈出對話框(有【重試】、【取消】兩個按鈕)“嘗試把你變成好 人失敗,是否重試?”。 1、怎么生成 exe 程序。怎么把做好的 exe 程序發(fā)給別人? 在我的電腦里直接進入工程文件夾。工程目錄下生成的 debug/release 文件 就是生成好的可執(zhí)行文件,發(fā)給別人就可以。Debug 和 Release 版本區(qū)別。怎么 生成 Release 版本。 1、對話框程序 VC6 下安裝 Win32 DialogBased Application /download/software/Win32DlgBasedAppWizard.zip VC2008 下安裝 Win32 DialogBased Application /download/software/DlgBasedAppWizardVS2008.zip 如鵬的 Win32 DialogBased Application 沒有做神奇的事情,只是簡化了創(chuàng)建 的過程,大家也可以手工創(chuàng)建,創(chuàng)建的代碼可以在沒有安裝 Win32 DialogBased Application Wizard 的機器上用。演示在 2008 上從 win32application 創(chuàng)建一個 Win32 DialogBased Application。 在資源編輯器中編輯對話框界面并且拖放控件上去。試試常用的那些控件 什么是屬性。 作業(yè):開發(fā)一個注冊界面。 2、常見問題C語言也能干大事 如鵬網(wǎng) (1)開發(fā) Windows 程序有什么前途?不要急于求成,用自己最熟悉的語言 探索編程的各個方面,內(nèi)核級開發(fā)、數(shù)據(jù)庫、網(wǎng)絡(luò)、動態(tài)網(wǎng)站開發(fā)等。學(xué)C 語 言也能干大事的目的并不是直接找開發(fā) Windows 程序的工作,只要鍛煉了動手 能力和一通百通的數(shù)據(jù)庫、網(wǎng)絡(luò)、動態(tài)網(wǎng)站開發(fā)、面向?qū)ο蟮燃寄?,學(xué)什么東西、 找什么工作都很輕松。 (2)學(xué) MFC 不是更好?MFC 亂七八糟的東西太多,隱藏了太多,隱藏不僅 沒有有利于初學(xué)者學(xué)習(xí),反而使得更復(fù)雜。MFC 只是一個稍微封裝的 SDK,學(xué)會 了這里的課程如果又需要再去學(xué) MFC 的話會發(fā)現(xiàn) 90%是相同的。 /forum/thread-338-1-1.html 3、對話框中圖片資源的應(yīng)用在資源視圖中,選擇“引入”,然后文件過濾器選 擇“*.*”,找到 bmp 圖片文件。選中圖片空間,要點擊邊緣。拖一個 IMAGE 控 件過來,并且修改 IMAGE 控件的 Type 屬性為 BitMap,在控件的 Image 屬性中選 擇剛才添加的 BITMAP 資源。jpg 的格式怎么轉(zhuǎn)換為 bmp 格式的呢?用畫圖工具 (mspaint)。圖片被編譯到了程序中,不再依賴于源文件 4、菜單資源 制作好菜單資源后,在對話框的 Menu 屬性中選擇剛才制作好的對話框。 子菜單項(選中【彈出】)、快捷鍵(在要擔(dān)當(dāng)快捷鍵的字母前加&)、分 隔符5、只有控件、菜單,可以點擊控件、菜單以后的動作怎么做呢?就要寫代 碼了。后面會講 C 語言也能干大事第三節(jié) 板書:1、怎么修改程序圖標,引入一個 ico 文件(可以用一些工具制作 ico 圖標, 網(wǎng)上搜“制作 ico”),然后命名 ID 為 1,重新構(gòu)建。C語言也能干大事 如鵬網(wǎng) 2、在編寫控制臺程序的時候一切流程都是有先后關(guān)系、并行的,而且所有 函數(shù)都是由我們來調(diào)用的,比如下面的實例性代碼: printf(確定請輸入 y,取消輸入 n); char c = getchar();/scanf if(c=y) / else if(c=n) / Void func1() MessageBox(NULL,TEXT(“按鈕 1 被按下了”).); Void func2() C語言也能干大事 如鵬網(wǎng) MessageBox(NULL,TEXT(“按鈕 2 被按下了”).); 我們可以用 getchar 來等待用戶輸入一個值。但是到了 Windows 編程中就不一樣 了,同一時刻用戶即可能點擊【OK】按鈕,又可能點擊【Cancel】按鈕,又可能 在文本框中輸入幾個字,還可能在窗口上雙擊幾下,這樣就無法同時等待用戶的 這些動作。為了解決這個問題,Windows 引入了消息機制(也可以叫做回調(diào)機制 或者事件機制)。在程序啟動的時候把函數(shù) func1 要響應(yīng)【OK】按鈕 1 的點擊動 作、函數(shù) func2 要響應(yīng)【Cancel】按鈕的點擊動作、函數(shù) func3 要響應(yīng)窗口的雙 擊動作等等這些信息告訴 Windows,然后當(dāng)用戶執(zhí)行相應(yīng)操作的時候 Windows 就 會來主動調(diào)用你注冊的函數(shù),主動通知你。不再是程序調(diào)用操作系統(tǒng)的函數(shù),而 是操作系統(tǒng)反過來調(diào)用你的函數(shù)。Dont call me ,Ill call you!(也被人稱 為“好萊塢法則”)。 2、關(guān)于上面的這個問題要慢慢來理解,下面就來通過第一個例子來初步理 解這個 Dont call me ,Ill call you! /HANDLE_MSG 的意思就是告訴 Windows,當(dāng)發(fā)生 WM_COMMAND 消息的時候,請 /通知 Main_OnCommand 函數(shù) /id 這個參數(shù)是 Windows 給咱們“送”過來的 看 Main_OnCommand 方法,初探 windows 的消息機制。 void Main_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify)C語言也能干大事 如鵬網(wǎng) switch(id) case IDC_OK: MessageBox(hwnd,TEXT(歡迎訪問如鵬網(wǎng) www.RuP 大學(xué)生計算機學(xué)習(xí) 社區(qū)),TEXT(問好),MB_OK); break; default: break; C語言也能干大事 如鵬網(wǎng) 不同的控件要有不同的 id,控件的名字,在人類社會中名字有可能重名, 但是在 windows 中 id 不能重復(fù) 按鈕被按下的時候 Main_OnCommand 方法被調(diào)用,hwnd 是對話框句柄(什么 是句柄后面講,通俗的說就是通過它能夠操縱對話框),id 是控件的 id,后兩 個參數(shù)暫時不關(guān)心。 Main_OnCommand 方法中根據(jù) id,也就是被點擊按鈕的名字來決定不同的動 作。Hwnd 是當(dāng)前窗口的句柄,句柄就是把柄!操作一個東西,要先抓住他的把 柄!通過句柄就可以操作這個對象。 /不要忘了 break/不要忘了 case 中用大括號 3、定制自己的對話框,不同的按鈕不同的問好 然后重新添加一個自己的按鈕,在屬性中修改 Name 屬性為 IDC_BTNHELLO。 控件名字的潛規(guī)則:所有控件的 Name 都以“IDC_”開頭,然后后邊跟著控 件類型的簡稱(按鈕簡稱 BTN、文本框簡稱 EDT 等等),最后才是控件的真正的 名字。修改按鈕的 Caption 屬性(也就是按鈕上顯示的文字)為“問好”。 編輯 Main_OnCommand 方法: void Main_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify) switch(id) C語言也能干大事 如鵬網(wǎng) case IDC_BTNHELLO: MessageBox(NULL,TEXT(世界你好),TEXT(問好),MB_OK); break;/不要忘記 break default:break; 運行程序,點擊“問好”按鈕,咱們第一個響應(yīng)按鈕動作的程序就做好了。 4、自己動手寫計算器 1.0 版 (1)、得到控件中用戶輸入的文本 GetDlgItemText(hwnd,IDC_EDTNAME,str,sizeof(str);C語言也能干大事 如鵬網(wǎng) 第一個參數(shù)是對話框的句柄;第二參數(shù)就是控件的 id(name);第三個參 數(shù)就是字符串?dāng)?shù)組的指針; 疑問:為什么不能像 MessageBox 一樣把字符串做為返回值返回呢? 這就涉及到 C 語言中函數(shù)返回指針的問題了 在函數(shù)內(nèi)部返回函數(shù)內(nèi)構(gòu)建的指針有可能出現(xiàn)數(shù)據(jù)混亂. 當(dāng) f1 函數(shù)在執(zhí)行的時候,這段內(nèi)存是被占用的,一旦函數(shù)返回,那么內(nèi)存 就標記為可以被其他人、函數(shù)占用。 如果你把這段內(nèi)存中的指針返回了,那么一旦其他地方用了這段內(nèi)存,那么 你引用的就是錯誤的數(shù)據(jù)了。 用 GetWindowText、GetDlgItemText 的時候為什么要傳數(shù)組名呢?復(fù)習(xí):初 學(xué)者可以認為數(shù)組名就是指針,函數(shù)只有得到指針,才能直接操作數(shù)組中的數(shù)據(jù)。 (2)c 語言中字符串連接:wsprintf(str,”.”,a1,a2); 還有 sprintf,但是在編寫 windows 程序的時候最好使用 wsprintf。 /GetDlgItemText(hwnd,IDC_EDITNAME,str,sizeof(str); /第一參數(shù)是窗口的句柄,第二個參數(shù)是要取得內(nèi)容的控件的 ID /第三個參數(shù)就是字符串指針,第四個參數(shù)就是指針指向區(qū)域的大小 TCHAR name256;/為什么不用 strlen,sizeof。C語言也能干大事 如鵬網(wǎng) /如鵬網(wǎng)站內(nèi)搜索搜“strlen,sizeof”區(qū)別 /Windows 編程中一般都用 TCHAR 代替 char。TCHAR 有時候就是 char。 /解決 Unicode、中文編碼問題。 GetDlgItemText(hwnd,IDC_EDITNAME,name,sizeof(name); /printf 是打印到屏幕上 /printf(%s 你好,name); /sprintf 是打印到字符串中 /相當(dāng)于很多 C#、Java 語言里的字符串相加 name+你好 /sprintf(字符串,.,a1,a2,a3.); TCHAR msg256; /sprintf(msg,%s 你好,name); /wsprintf,C 語言開發(fā) Windows 程序的時候用 wsprintf 代替 sprintfC語言也能干大事 如鵬網(wǎng) /解決中文等問題 wsprintf(msg,%s 你好,name); MessageBox(hwnd,msg,msg,MB_OK); (3)向用戶問好 TCHAR name256; GetDlgItemText(hwnd,IDC_EDTNAME,name,sizeof(name)/sizeof(TCHAR); TCHAR msg256; wsprintf (msg,%s 你好,name); MessageBox(hwnd, msg,TEXT(問好),MB_OK); (4) C 語言里邊字符串轉(zhuǎn)換為數(shù)字:atoi:ascii to intC語言也能干大事 如鵬網(wǎng) (5) 編寫 windows 程序的時候最好用 TCHAR 來代替 char,可以避免中文的問題 case IDC_BTNHELLO: TCHAR name256; GetDlgItemText(hwnd,IDC_EDTNAME,name,sizeof(name)/sizeof(TCHAR); int i = atoi(name); int j=i*2; TCHAR result256; itoa(j,result,10);C語言也能干大事 如鵬網(wǎng) MessageBox(hwnd,result,TEXT(問好),MB_OK); (6)Get、Set:配對的,設(shè)置對話框的值用 SetDlgItemText: 代碼: case IDC_BTNADD: /取第一個文本框的字符串,然后得到整數(shù)表示 / 取第二個文本框的字符串,然后得到整數(shù)表示 /計算兩個整數(shù)的和 /把和重新轉(zhuǎn)換成字符串,然后 Messagebox 出來。 TCHAR cNumber1256; GetDlgItemText(hwnd,IDC_EDTNUM1,cNumber1,sizeof(cNumber1)/sizeof(TCHA R);C語言也能干大事 如鵬網(wǎng) int n1 = atoi(cNumber1); TCHAR cNumber2256; GetDlgItemText(hwnd,IDC_EDTNUM2,cNumber2,sizeof(cNumber2)/sizeof(TCHA R); int n2 = atoi(cNumber2); int n3 = n1+n2; TCHAR cResult256; itoa(n3,cResult,10); SetDlgItemText(hwnd,IDC_EDTRESULT, cResult); break; /int i1;C語言也能干大事 如鵬網(wǎng) /int i2; /不能夢想著直接定義兩個 int 類型的參數(shù),就讓 windows 告訴你兩個數(shù)的值 TCHAR str1256; TCHAR str2256; GetDlgItemText(hwnd,IDC_EDIT1,str1,sizeof(str1); GetDlgItemText(hwnd,IDC_EDIT2,str2,sizeof(str2); /兩個字符串不能直接相加,要先轉(zhuǎn)換成 int 類型。 /C 標準庫函數(shù):atoi,a:ascii to i:int 理解了 atoi 的簡寫不用死記硬背了 int i1=atoi(str1); int i2=atoi(str2); int i3=i1+i2;C語言也能干大事 如鵬網(wǎng) /printf(%i,i3); TCHAR str3256; itoa(i3,str3,2);/字符串轉(zhuǎn)換為整數(shù),第三個參數(shù)就是進制。 /wsprintf(str3,%i,i3); SetDlgItemText(hwnd,IDC_EDIT3,str3); (7)代碼中有 UINT、TCHAR、LRESULT、HWND 之類的新的數(shù)據(jù)類型,其實 它們只是一些類型的別名而已,可以通過宏定義看出來。但是考慮到可移植性, 盡量不要使用它們的真實類型。Typedef C 語言中聲明類型別名。 (8)作業(yè):做一個面積計算器,用戶輸入半徑,在另外一個文本框中顯示 面積。(10)作業(yè):用戶輸入十進制整數(shù),在另外一個文本框中顯示整數(shù)的二進制形 式。做一個十進制到二進制的轉(zhuǎn)換小工具。 (10)作業(yè):計算兩個數(shù)的差。 (11)思考:這個計算兩個數(shù)的和程序有什么缺陷?沒有阻止用戶輸入非數(shù) 字。怎么解決。 TCHAR str1256; TCHAR str2256;C語言也能干大事 如鵬網(wǎng) GetDlgItemText(hwnd,IDC_EDIT1,str1,sizeof(str1); GetDlgItemText(hwnd,IDC_EDIT2,str2,sizeof(str2); int i1=atoi(str1); int i2=atoi(str2); TCHAR str1temp256; TCHAR str2temp256; wsprintf(str1temp,%i,i1); wsprintf(str2temp,%i,i2); if(strcmp(str1,str1temp)!=0) MessageBox(hwnd,TEXT(第一個數(shù)不是合法的數(shù)!), TEXT(錯誤提示),MB_OK|MB_ICONERROR); return; if(strcmp(str2,str2temp)!=0) MessageBox(hwnd,TEXT(第二個數(shù)不是合法的數(shù)!), TEXT(錯誤提示),MB_OK|MB_ICONERROR);C語言也能干大事 如鵬網(wǎng) return; int i3=i1+i2; TCHAR str3256; wsprintf(str3,%i,i3); SetDlgItemText(hwnd,IDC_EDIT3,str3); 多練手,光聽視頻什么用都沒有,浪費時間,必須練手,再簡單的代碼也要 自己寫,不要眼高手低!你沒有多牛 X。 如何提取函數(shù): /*BOOL Main_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam) return TRUE; */ BOOL IsInt(TCHAR* str) int i=atoi(str); TCHAR strtemp256;C語言也能干大事 如鵬網(wǎng) wsprintf(strtemp,%i,i); if(strcmp(str,strtemp)!=0) return FALSE; else return TRUE; /*void Main_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify) switch(id) case IDC_OK:*/ TCHAR str1256;C語言也能干大事 如鵬網(wǎng) TCHAR str2256; GetDlgItemText(hwnd,IDC_EDIT1,str1,sizeof(str1); GetDlgItemText(hwnd,IDC_EDIT2,str2,sizeof(str2); if(IsInt(str1)=FALSE) MessageBox(hwnd,TEXT(第一個數(shù)不是合法的數(shù)!), TEXT(錯誤提示),MB_OK|MB_ICONERROR); return; if(IsInt(str2)=FALSE) MessageBox(hwnd,TEXT(第二個數(shù)不是合法的數(shù)!), TEXT(錯誤提示),MB_OK|MB_ICONERROR); return; int i1=atoi(str1); int i2=atoi(str2); int i3=i1+i2; TCHAR str3256;C語言也能干大事 如鵬網(wǎng) wsprintf(str3,%i,i3); SetDlgItemText(hwnd,IDC_EDIT3,str3); C 語言也能干大事第四節(jié) 板書:上節(jié)課作業(yè) (8)作業(yè):做一個面積計算器,用戶輸入半徑,在另外一個文本框中顯示 面積。(10)作業(yè):用戶輸入十進制整數(shù),在另外一個文本框中顯示整數(shù)的二進制形 式。做一個十進制到二進制的轉(zhuǎn)換小工具。 (10)作業(yè):計算兩個數(shù)的差。不要總認為看很多書、學(xué)高深技術(shù)、看很多 視頻就是牛人,能把一個最簡單的程序快速寫出來的才是牛人! (11)思考:這個計算兩個數(shù)的和程序有什么缺陷?沒有阻止用戶輸入非數(shù) 字。怎么解決。 調(diào)試的技巧,斷點:執(zhí)行到斷點的時候程序暫停住。 C 語言也能干大事第五節(jié) 板書:上節(jié)課的作業(yè)你自己寫了嗎?比我快嗎?如果沒有寫的話別繼續(xù)往下看,先 回去自己寫。 實現(xiàn)“自己動手寫計算器 2.0 版”,允許選擇運算符號。 ComboBox 的操作 (1)添加項:C語言也能干大事 如鵬網(wǎng) 填入 Combo 最簡單的方法是借助 ComboBox_AddString“函數(shù)”(其實是 宏):ComboBox_AddString(hwndCtrl,str) 每個控件也有自己的句柄。句柄是 WINDOWS 用來標識被應(yīng)用程序所建立或 使用的對象的唯一整數(shù),WINDOWS 使用各種各樣的句柄標識諸如應(yīng)用程序?qū)嵗?窗口、圖片、圖標等等。控件句柄和控件 id 的區(qū)別:控件句柄在每次運行的時 候都是不一樣的,而控件 id 則是確定的。ComboBox_AddString 等幾乎所有控件 函數(shù)都可以對整個 Windows 中的控件進行控制(有的游戲外掛的原理),在一 個對話框內(nèi) id 不能重復(fù),但是在不同的對話框內(nèi)則可以重復(fù),因此需要一個全 局的不重復(fù)的句柄來表示控件,通過對話框+id 聯(lián)合確定。兩個不同的程序(哪 怕是同一個程序啟動的兩個不同的實例,開兩個記事本)是找到我爸,然后找我 父親的 id=1 的兒子,也就是我,然后再打我。這就是通過我父親的把柄和我的 id=1 來定義我 GetDlgItem 由對話框句柄+id 得到控件的句柄。 Main_OnInitDialog 對話框初始化的時候被調(diào)用。 做一個例子 (2) 確定目前選項的索引:int ComboBox_GetCurSel( HWND hwndCtl);Cur:CurrentSel:Selection 返回值是當(dāng)前項的編號,從 0 開始。得到的不是“北京市”這樣的字符串,而是索引(編號)如果沒有項目被 選中,那么從函數(shù)中傳回的 iIndex 值為 CB_ERR。做一個例子 (3)刪除項: int ComboBox_DeleteString( HWND hwndCtl, int index); 做一個例子 (4)取得有多少項:C語言也能干大事 如鵬網(wǎng) int ComboBox_GetCount( HWND hwndCtl);返回值是個數(shù)。 (5)選定某一項 int ComboBox_SetCurSel( HWND hwndCtl, int index);將 index 設(shè)定為-1 則取消所有選擇 (6)得到某項的值 int ComboBox_GetLBText( HWND hwndCtl, int index, LPCTSTR lpszBuffer); 怎么讓 Combo 不能改?類型:下拉列表 更多 ComboBox 的用法 /en-us/library/cc656426(VS.85).aspx 是宏,不是函數(shù)。SendDlgItemMessage/SendMessage。 額外知識,不講,自學(xué)(不想變成填鴨式教育,課上只講思想性的東西,會 給大家學(xué)習(xí)資料,希望大家培養(yǎng)自學(xué)能力) 實現(xiàn)四則運算器: 作業(yè) (1) 給本節(jié)課的小練習(xí)提改進建議并且自己實現(xiàn)。 (2)學(xué)生管理系統(tǒng)(畫原型界面布置)增、刪、查(雙擊)、搜C語言也能干大事 如鵬網(wǎng) 多練手,光聽視頻什么用都沒有,浪費時間,必須練手,再簡單的代碼也要 自己寫,不要眼高手低!你沒有多牛 X C 語言也能干大事第六節(jié) 板書:上節(jié)課作業(yè):學(xué)生管理系統(tǒng)(畫原型界面布置)增、刪、查(雙擊)、搜 接下來我們要實現(xiàn)小時鐘。涉及到的主要知識點是定時器的使用,涉及到的 C 知識就是函數(shù)指針(回調(diào)函數(shù)) 使用定時器 回調(diào)就是不是你調(diào)別人,而是別人調(diào)你。時間到了會叫你,沒到的時候不會 煩你。讓 Windows 直接將定時器消息發(fā)送給您程序的另一個函數(shù)。 我們把以下的 callback 函數(shù)稱為 TimerProc(您能夠選擇與其它一些用語不 會發(fā)生沖突的任何名稱),它只處理 WM_TIMER 消息: VOID CALLBACK TimerProc ( HWND hwnd, UINT message, UINT iTimerID, DWORD dwTime); SetTimer (hwnd, iTimerID, iMsecInterval, TimerProc) ; 19、得到當(dāng)前日期: void GetLocalTime(LPSYSTEMTIME); 課上練習(xí): SYSTEMTIME stLocal;C語言也能干大事 如鵬網(wǎng) char chBuf256; GetLocalTime(&stLocal); /顯示時間的間隔。 wsprintf(chBuf,TEXT(%u/%u/%u %u:%u:%u:%u 周%drn), stLocal.wYear, stLocal.wMonth, stLocal.wDay, stLocal.wHour, stLocal.wMinute, stLocal.wSecond, stLocal.wMilliseconds,stLocal.wDayOfWeek); MessageBox(NULL,chBuf,MB_OK); SetTimer(hwnd,1,1000,TimerProc); void CALLBACK TimerProc (HWND hwnd, UINT message, UINT iTimerID, DWORD dwTime)C語言也能干大事 如鵬網(wǎng) SYSTEMTIME time; GetLocalTime(&time); TCHAR strTime256; /%后面的 0 表示不夠的位數(shù)補零,5 是總位數(shù),就這樣 wsprintf(strTime,%04d-%02d-%02d %02d:%02d:%02d,time.wYear,time.wMonth,time.wDay,time.wHour,time.wMin ute,time.wSecond); SetDlgItemText(hwnd,IDC_EDTTIME,strTime); 作業(yè):定時關(guān)機、定時關(guān)閉顯示器,如何編程實現(xiàn)關(guān)機、關(guān)顯示器。到整天 播放音樂。自學(xué)!“關(guān)閉顯示器 API”、“關(guān)閉顯示器 函數(shù)”9、取得復(fù)選按鈕的是否選中: LRESULT Button_GetCheck( HWND hwndCtl);BST_CHECKED BST_UNCHECKEDC語言也能干大事 如鵬網(wǎng) 設(shè)置復(fù)選按鈕是否選中: LRESULT Button_SetCheck( HWND hwndCtl, int check);BST_CHECKED BST_UNCHECKED 7、ListBox(和 Combo 類似) (1)添加項: 如果采用 LBS_SORT 樣式,那么填入清單方塊最簡單的方法是借助 ListBox_AddString: int ListBox_AddString( HWND hwndCtl, LPCSTR lpsz); 如果沒有采用 LBS_SORT,那么可以使用 ListBox_InsertString 指定一個索引值, 將字符串插入到清單方塊中: int ListBox_InsertString( HWND hwndCtl, int index, LPCSTR lpsz); (2)刪除項: int ListBox_DeleteString( HWND hwndCtl, int index); (3)取得有多少項: int ListBox_GetCount( HWND hwndCtl); (4)選定某一項 int ListBox_SetCurSel( HWND hwndCtl, int index);將 iParam 設(shè)定為-1 則取消所有選擇(5) 確 定目前選項的索引:int ListBox_GetCurSel( HWND hwndCtl); 如果沒有項目被選中,那么從呼叫中傳回的 iIndex 值為 LB_ERR。(6)將某項目復(fù)制到文字緩沖區(qū)中:int ListBox_GetText( HWND hwndCtl, int index, LPCTSTR lpszBuffer);C語言也能干大事 如鵬網(wǎng) 9、菜單資源 (1)制作好菜單資源后,在對話框的 Menu 屬性中選擇剛才制作好的對話 框。(2)響應(yīng)菜單操作。菜單點擊后也會發(fā)送 WM_COMMAND 消息 id 就是被 選擇菜單的 id。例子: case IDM_QUIT: EndDialog(hwnd,id); 作業(yè):文件操作。自己動手寫記事本。路徑寫固定的路徑。 下節(jié)課內(nèi)容:作業(yè)點評,文件對話框、播放音樂 C 語言也能干大事第七節(jié) 板書:作業(yè)點評: 文件操作。自己動手寫記事本。 RichEdit 控件。LoadLibrary( riched32.dll ); 參考資料:/en-us/library/bb787605(VS.85).aspx 5、給結(jié)構(gòu)體所有字段置零 復(fù)習(xí)一下 C 語言中 memset 以及結(jié)構(gòu)體的應(yīng)用。C 語言中聲明一個結(jié)構(gòu)體變 量之后,在使用這個變量之前要首先用 memset 來把各個位清零。使用 C 語言內(nèi) 置的函數(shù) memset 來完成: memset(&s1,sizeof(s1),0);C語言也能干大事 如鵬網(wǎng) 在這里我們使用 ZeroMemory“函數(shù)”,ZeroMemory 其實并不是函數(shù),其實 是 memset 的宏定義 ZeroMemory 其實就是 memset,紙老虎而已,不是一個全新的函數(shù)。 6、打開文件對話框的使用 首先#include OPENFILENAME ofn; char szFileMAX_PATH; ZeroMemory(&ofn,sizeof(ofn); ofn.lStructSize = sizeof(ofn); ofn.lpstrFile = szFile; ofn.lpstrFile0 = TEXT(0); ofn.nMaxFile = sizeof(szFile); ofn.lpstrFilter = TEXT(ALL0*.*0Text0*.TXT0); ofn.nFilterIndex = 1;C語言也能干大事 如鵬網(wǎng) ofn.lpstrFileTitle = NULL; ofn.nMaxFileTitle = 0; ofn.lpstrInitialDir = NULL; ofn.hwndOwner = hwnd;/自學(xué)能力、探索能力、猜測能力 ofn.Flags = OFN_EXPLORER |OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST; if (GetOpenFileName(&ofn) MessageBox(NUL
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 儀器儀表產(chǎn)品光學(xué)成像質(zhì)量評價標準考核試卷
- 醫(yī)療器械智能制造的智能物流路徑規(guī)劃算法考核試卷
- 牙科正畸治療力學(xué)與患者口腔健康風(fēng)險評估考核試卷
- 公共交通企業(yè)市場營銷效果評估體系構(gòu)建考核試卷
- 部編人教版六年級《語文》全冊古詩、文言文、名言警句積累
- 體育場地施工項目預(yù)算編制項目融資成本分析考核試卷
- 古代詩詞中的天文歷法與時間觀念表達考核試卷
- 部編人教版一年級上冊語文期末復(fù)習(xí)全冊知識點梳理
- 2025年中國PTFE針刺氈數(shù)據(jù)監(jiān)測研究報告
- 2025年中國PE-X地暖管材數(shù)據(jù)監(jiān)測報告
- 譯林版(2024)七年級下冊英語期末復(fù)習(xí):完形填空+閱讀理解 練習(xí)題(含答案)
- 第5章 相交線與平行線 復(fù)習(xí)課件
- 廣東省廣州各區(qū)2025屆七下英語期末經(jīng)典試題含答案
- 企業(yè)科技論文管理制度
- 山東卷2025年高考歷史真題
- 2025-2030年中國蝦苗行業(yè)市場現(xiàn)狀供需分析及投資評估規(guī)劃分析研究報告
- 肺曲霉菌病治療講課件
- 頂端分生組織穩(wěn)態(tài)調(diào)控-洞察闡釋
- 2025年農(nóng)業(yè)經(jīng)濟學(xué)考試試題及答案
- 2025至2030年中國硫化橡膠制避孕套行業(yè)供需態(tài)勢分析及投資機會分析報告
- 2025-2030年“一帶一路”背景下甘肅省區(qū)域經(jīng)濟發(fā)展分析及投資前景報告
評論
0/150
提交評論