![C語言也能干大事啊_第1頁](http://file4.renrendoc.com/view/7406995d0845b397cca2bf4cc041638f/7406995d0845b397cca2bf4cc041638f1.gif)
![C語言也能干大事啊_第2頁](http://file4.renrendoc.com/view/7406995d0845b397cca2bf4cc041638f/7406995d0845b397cca2bf4cc041638f2.gif)
![C語言也能干大事啊_第3頁](http://file4.renrendoc.com/view/7406995d0845b397cca2bf4cc041638f/7406995d0845b397cca2bf4cc041638f3.gif)
![C語言也能干大事啊_第4頁](http://file4.renrendoc.com/view/7406995d0845b397cca2bf4cc041638f/7406995d0845b397cca2bf4cc041638f4.gif)
![C語言也能干大事啊_第5頁](http://file4.renrendoc.com/view/7406995d0845b397cca2bf4cc041638f/7406995d0845b397cca2bf4cc041638f5.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、C 語言也能干大事第一節(jié)板書:1、C 語言不是只能開發(fā)黑底白字的控制臺界面程序。學(xué)習(xí)本課的基礎(chǔ):本課程不講C 語言基礎(chǔ)知識,C 語言考及格,學(xué)的過程中配合復(fù)習(xí),有不懂的回去翻書。2、學(xué)完本課程以后同學(xué)們做的一些作品賞析:計算器、俄羅斯方塊、音樂播放器、學(xué)生管理系統(tǒng)(http:/www.rupen/forum/thread-2487-1-1.html ),郵件客戶端(http:/www.rupen/forum/thread-3697-1-1-uid7.html ),Web 論壇(http:/www.rupen/forum/thread-3991-1-1-uid7.html )可以開發(fā)游戲、網(wǎng)絡(luò)程
2、序、網(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 語言寫大程序的時候不可能把所有的代碼都寫在一個文件中,肯定要寫很多文件?!肮こ蹋≒roject)”就是這些文件的一個集合。)在“工程名”中寫入你
3、為這個工程取的名字,最好有一定意義。下一步【一個簡單的Windows 程序】4、向Windows 的世界問好MessageBox(NULL,TEXT(世界你好),TEXT(問好),MB_OK);VC6 在Vista、Windows 下編譯調(diào)試時可能有兼容性提示。C語言也能干大事如鵬網(wǎng)www.rupen 5、學(xué)本課程常見問題(1)為什么不用TurboC?Turbo C(Win-TC)太老了,界面還是DOS 界面,庫也是DOS 的庫,沒有網(wǎng)絡(luò)開發(fā)包、沒有Windows 界面開發(fā)包。TC 只能用來學(xué)C 的基礎(chǔ),要進行實際開發(fā)必須使用先進一點的工具。還是讓TurboC 進博物館吧。(2)為什么不用更高
4、版本的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)核等),一通百通,一切語言都是紙老虎。參
5、考資料如鵬網(wǎng)首頁。6、深入研究MessageBox(1)MessageBox(NULL,TEXT(世界你好),TEXT(問好),MB_OK);第一個參數(shù)暫時不講;第二個是正文;第三個是標題(Caption);第四個是類型。MB_OK 就是表示有一個OK 按鈕【確定】)TEXT 是一個宏,當(dāng)字符串中有中文的時候最好用TEXT 來包圍這個字符串,雖然C語言也能干大事如鵬網(wǎng)www.rupen 不使用TEXT 在VC6 中沒問題,但是在VC7 中有問題,而且微軟也建議使用TEXT宏,因此在涉及到中文的場合要使用它。他的作用就是把中文轉(zhuǎn)化成不會亂碼的格式。(暫時這么認為)。_T(問好),其實_T 只是T
6、EXT 的一個縮寫而已。而且_T 在有的低版本里不識別。TEXT()低版本也識別。暫時不用關(guān)心TEXT 的細節(jié)。換個樣子:MessageBox(NULL, TEXT(世界你好), TEXT(你好),MB_OKCANCEL);可從設(shè)置希望在對話框中顯示的按鈕:#define MB_OK0 x00000000L#define MB_OKCANCEL0 x00000001L#define MB_ABORTRETRYIGNORE0 x00000002L#define MB_YESNOCANCEL0 x00000003L#define MB_YESNO0 x00000004L#define MB_RET
7、RYCANCEL0 x00000005L也可以設(shè)置對話框中顯示的圖標:#define MB_ICONHAND0 x00000010LC語言也能干大事如鵬網(wǎng)www.rupen #define MB_ICONQUESTION0 x00000020L#define MB_ICONEXCLAMATION0 x00000030L#define MB_ICONASTERISK0 x00000040L比如:MessageBox(NULL, TEXT(世界你好) ,TEXT(你好),MB_ICONQUESTION);(2)可是如果我想顯示“確定、取消”按鈕的時候同時使用問號圖標呢?MessageBox(NUL
8、L, 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 等的低四位不同,但是高位永遠為
9、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)www.rupen (4)返回值MessageBox 是有返回值的,返回值為用戶點擊的按鈕:#define IDOK1#define IDCANCEL2#define IDABORT3#define IDRETRY4#de
10、fine IDIGNORE5#define IDYES6#define IDNO7代碼:int ret = MessageBox(NULL, TEXT(你是人嗎?), TEXT(火星人),MB_YESNO | MB_ICONQUESTION);if(ret=IDYES)C語言也能干大事如鵬網(wǎng)www.rupen MessageBox(NULL, TEXT(火星人你好), TEXT(問好),MB_OK);elseMessageBox(NULL, TEXT(歡迎回家來), TEXT(問好),MB_OK);6、課后作業(yè):自己動手寫惡搞程序。運行以后彈出詢問對話框(有【是】、【否】兩個按鈕以及問號圖標)
11、“你是好人嗎?”,如果點擊【是】,則彈出對話框(只有一個【確定】按鈕以及一個警告圖標)“你看你就不像好人,點擊【確定】開始格式化C 盤!”;如果點擊【否】,則彈出對話框(有【重試】、【取消】兩個按鈕)“嘗試把你變成好人失敗,是否重試?”。別把教學(xué)視頻當(dāng)電影看!多練!多寫C 語言也能干大事第二節(jié)板書:C語言也能干大事如鵬網(wǎng)www.rupen 運行以后彈出詢問對話框(有【是】、【否】兩個按鈕以及問號圖標)“你是好人嗎?”,如果點擊【是】,則彈出對話框(只有一個【確定】按鈕以及一個警告圖標)“你看你就不像好人,點擊【確定】開始格式化C 盤!”;如果點擊【否】,則彈出對話框(有【重試】、【取消】兩個按
12、鈕)“嘗試把你變成好人失敗,是否重試?”。1、怎么生成exe 程序。怎么把做好的exe 程序發(fā)給別人?在我的電腦里直接進入工程文件夾。工程目錄下生成的debug/release 文件就是生成好的可執(zhí)行文件,發(fā)給別人就可以。Debug 和Release 版本區(qū)別。怎么生成Release 版本。1、對話框程序VC6 下安裝Win32 DialogBased Applicationhttp:/down1.rupen/download/software/Win32DlgBasedAppWizard.zipVC2008 下安裝Win32 DialogBased Applicationhttp:/down
13、1.rupen/download/software/DlgBasedAppWizardVS2008.zip如鵬的Win32 DialogBased Application 沒有做神奇的事情,只是簡化了創(chuàng)建的過程,大家也可以手工創(chuàng)建,創(chuàng)建的代碼可以在沒有安裝Win32 DialogBasedApplication Wizard 的機器上用。演示在2008 上從win32application 創(chuàng)建一個Win32 DialogBased Application。在資源編輯器中編輯對話框界面并且拖放控件上去。試試常用的那些控件什么是屬性。作業(yè):開發(fā)一個注冊界面。2、常見問題C語言也能干大事如鵬網(wǎng)ww
14、w.rupen (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%是相同的。http:/www.rupen/forum/thread-3
15、38-1-1.html3、對話框中圖片資源的應(yīng)用在資源視圖中,選擇“引入”,然后文件過濾器選擇“*.*”,找到bmp 圖片文件。選中圖片空間,要點擊邊緣。拖一個IMAGE 控件過來,并且修改IMAGE 控件的Type 屬性為BitMap,在控件的Image 屬性中選擇剛才添加的BITMAP 資源。jpg 的格式怎么轉(zhuǎn)換為bmp 格式的呢?用畫圖工具(mspaint)。圖片被編譯到了程序中,不再依賴于源文件4、菜單資源制作好菜單資源后,在對話框的Menu 屬性中選擇剛才制作好的對話框。子菜單項(選中【彈出】)、快捷鍵(在要擔(dān)當(dāng)快捷鍵的字母前加&)、分隔符5、只有控件、菜單,可以點擊控件、菜單以后
16、的動作怎么做呢?就要寫代碼了。后面會講C 語言也能干大事第三節(jié)板書:1、怎么修改程序圖標,引入一個ico 文件(可以用一些工具制作ico 圖標,網(wǎng)上搜“制作ico”),然后命名ID 為1,重新構(gòu)建。C語言也能干大事如鵬網(wǎng)www.rupen 2、在編寫控制臺程序的時候一切流程都是有先后關(guān)系、并行的,而且所有函數(shù)都是由我們來調(diào)用的,比如下面的實例性代碼:printf(確定請輸入y,取消輸入n);char c = getchar();/scanfif(c=y)/else if(c=n)/Void func1()MessageBox(NULL,TEXT(“按鈕1 被按下了”).);Void func2
17、()C語言也能干大事如鵬網(wǎng)www.rupen 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)窗口的雙擊動
18、作等等這些信息告訴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_OnCom
19、mand 方法,初探windows 的消息機制。void Main_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify)C語言也能干大事如鵬網(wǎng)www.rupen switch(id)case IDC_OK:MessageBox(hwnd,TEXT(歡迎訪問如鵬網(wǎng)www.RuPen 大學(xué)生計算機學(xué)習(xí)社區(qū)),TEXT(問好),MB_OK);break;default:break;C語言也能干大事如鵬網(wǎng)www.rupen 不同的控件要有不同的id,控件的名字,在人類社會中名字有可能重名,但是在windows 中id 不能重復(fù)按鈕被按下
20、的時候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_”開頭,然后后邊跟
21、著控件類型的簡稱(按鈕簡稱BTN、文本框簡稱EDT 等等),最后才是控件的真正的名字。修改按鈕的Caption 屬性(也就是按鈕上顯示的文字)為“問好”。編輯Main_OnCommand 方法:void Main_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify)switch(id)C語言也能干大事如鵬網(wǎng)www.rupen case IDC_BTNHELLO:MessageBox(NULL,TEXT(世界你好),TEXT(問好),MB_OK);break;/不要忘記breakdefault:break;運行程序,點擊“問好”按
22、鈕,咱們第一個響應(yīng)按鈕動作的程序就做好了。4、自己動手寫計算器1.0 版(1)、得到控件中用戶輸入的文本GetDlgItemText(hwnd,IDC_EDTNAME,str,sizeof(str);C語言也能干大事如鵬網(wǎng)www.rupen 第一個參數(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ù)占用。如果
23、你把這段內(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ù)就是字符串指針,第
24、四個參數(shù)就是指針指向區(qū)域的大小TCHAR name256;/為什么不用strlen,sizeof。C語言也能干大事如鵬網(wǎng)www.rupen /如鵬網(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
25、(字符串,.,a1,a2,a3.);TCHAR msg256;/sprintf(msg,%s 你好,name);/wsprintf,C 語言開發(fā)Windows 程序的時候用wsprintf 代替sprintfC語言也能干大事如鵬網(wǎng)www.rupen /解決中文等問題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 (ms
26、g,%s 你好,name);MessageBox(hwnd, msg,TEXT(問好),MB_OK);(4)C 語言里邊字符串轉(zhuǎn)換為數(shù)字:atoi:ascii to intC語言也能干大事如鵬網(wǎng)www.rupen (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,r
27、esult,10);C語言也能干大事如鵬網(wǎng)www.rupen 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(TCHAR);C語言
28、也能干大事如鵬網(wǎng)www.rupen int n1 = atoi(cNumber1);TCHAR cNumber2256;GetDlgItemText(hwnd,IDC_EDTNUM2,cNumber2,sizeof(cNumber2)/sizeof(TCHAR);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)www.rupen /int i2;/不能夢想
29、著直接定義兩個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:asciito i:int 理解了atoi 的簡寫不用死記硬背了int i1=atoi(str1);int i2=atoi(str2);int i3=i1+i2;C語言也能干大事如鵬網(wǎng)www.rupe
30、n /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ù),在另外一個文本框中顯
31、示整數(shù)的二進制形式。做一個十進制到二進制的轉(zhuǎn)換小工具。(10)作業(yè):計算兩個數(shù)的差。(11)思考:這個計算兩個數(shù)的和程序有什么缺陷?沒有阻止用戶輸入非數(shù)字。怎么解決。TCHAR str1256;TCHAR str2256;C語言也能干大事如鵬網(wǎng)www.rupen 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;
32、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)www.rupen return;int i3=i1+i2;TCHAR str3256;ws
33、printf(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)www.rupen wsprintf(strtemp,%i,i);if(strcm
34、p(str,strtemp)!=0)return FALSE;elsereturn TRUE;/*void Main_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINTcodeNotify)switch(id)case IDC_OK:*/TCHAR str1256;C語言也能干大事如鵬網(wǎng)www.rupen TCHAR str2256;GetDlgItemText(hwnd,IDC_EDIT1,str1,sizeof(str1);GetDlgItemText(hwnd,IDC_EDIT2,str2,sizeof(str2);if(IsInt(str1)
35、=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)www.rupen wsprintf(str3,%i,i3);SetDlgItemText(hwnd,IDC
36、_EDIT3,str3);C 語言也能干大事第四節(jié)板書:上節(jié)課作業(yè)(8)作業(yè):做一個面積計算器,用戶輸入半徑,在另外一個文本框中顯示面積。(10)作業(yè):用戶輸入十進制整數(shù),在另外一個文本框中顯示整數(shù)的二進制形式。做一個十進制到二進制的轉(zhuǎn)換小工具。(10)作業(yè):計算兩個數(shù)的差。不要總認為看很多書、學(xué)高深技術(shù)、看很多視頻就是牛人,能把一個最簡單的程序快速寫出來的才是牛人?。?1)思考:這個計算兩個數(shù)的和程序有什么缺陷?沒有阻止用戶輸入非數(shù)字。怎么解決。調(diào)試的技巧,斷點:執(zhí)行到斷點的時候程序暫停住。C 語言也能干大事第五節(jié)板書:上節(jié)課的作業(yè)你自己寫了嗎?比我快嗎?如果沒有寫的話別繼續(xù)往下看,先回去自
37、己寫。實現(xiàn)“自己動手寫計算器2.0 版”,允許選擇運算符號。ComboBox 的操作(1)添加項:C語言也能干大事如鵬網(wǎng)www.rupen 填入Combo 最簡單的方法是借助ComboBox_AddString“函數(shù)”(其實是宏):ComboBox_AddString(hwndCtrl,str)每個控件也有自己的句柄。句柄是WINDOWS 用來標識被應(yīng)用程序所建立或使用的對象的唯一整數(shù),WINDOWS 使用各種各樣的句柄標識諸如應(yīng)用程序?qū)嵗⒋翱?、圖片、圖標等等。控件句柄和控件id 的區(qū)別:控件句柄在每次運行的時候都是不一樣的,而控件id 則是確定的。ComboBox_AddString 等幾
38、乎所有控件函數(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(H
39、WND hwndCtl);Cur:CurrentSel:Selection 返回值是當(dāng)前項的編號,從0開始。得到的不是“北京市”這樣的字符串,而是索引(編號)如果沒有項目被選中,那么從函數(shù)中傳回的iIndex 值為CB_ERR。做一個例子(3)刪除項:int ComboBox_DeleteString(HWND hwndCtl, int index);做一個例子(4)取得有多少項:C語言也能干大事如鵬網(wǎng)www.rupen int ComboBox_GetCount(HWND hwndCtl);返回值是個數(shù)。(5)選定某一項int ComboBox_SetCurSel(HWND hwndCtl,
40、 int index);將index 設(shè)定為-1 則取消所有選擇(6)得到某項的值int ComboBox_GetLBText(HWND hwndCtl, int index, LPCTSTR lpszBuffer);怎么讓Combo 不能改?類型:下拉列表更多ComboBox 的用法http:/msdn.micro/en-us/library/cc656426(VS.85).aspx是宏,不是函數(shù)。SendDlgItemMessage/SendMessage。額外知識,不講,自學(xué)(不想變成填鴨式教育,課上只講思想性的東西,會給大家學(xué)習(xí)資料,希望大家培養(yǎng)自學(xué)能力)實現(xiàn)四則運算器:作業(yè)(1)給本
41、節(jié)課的小練習(xí)提改進建議并且自己實現(xiàn)。(2)學(xué)生管理系統(tǒng)(畫原型界面布置)增、刪、查(雙擊)、搜C語言也能干大事如鵬網(wǎng)www.rupen 多練手,光聽視頻什么用都沒有,浪費時間,必須練手,再簡單的代碼也要自己寫,不要眼高手低!你沒有多牛XC 語言也能干大事第六節(jié)板書:上節(jié)課作業(yè):學(xué)生管理系統(tǒng)(畫原型界面布置)增、刪、查(雙擊)、搜接下來我們要實現(xiàn)小時鐘。涉及到的主要知識點是定時器的使用,涉及到的C 知識就是函數(shù)指針(回調(diào)函數(shù))使用定時器回調(diào)就是不是你調(diào)別人,而是別人調(diào)你。時間到了會叫你,沒到的時候不會煩你。讓W(xué)indows 直接將定時器消息發(fā)送給您程序的另一個函數(shù)。我們把以下的callback
42、函數(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)www.rupen char chBuf256;GetLocalTime
43、(&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, U
44、INT message, UINT iTimerID,DWORD dwTime)C語言也能干大事如鵬網(wǎng)www.rupen 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.wMinute,time.wSecond);SetDlgItemText(hwnd,IDC_EDTTIME,strTime);作
45、業(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)www.rupen 設(shè)置復(fù)選按鈕是否選中:LRESULT Button_SetCheck(HWND hwndCtl, int check);BST_CHECKED BST_UNCHECKED7、ListBox(和Combo 類似)(1)添加項:如果采用LBS_SORT 樣式,那么填入清單方塊最簡單的方法
46、是借助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); (
47、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)www.rupen 9、菜單資源(1)制作好菜單資源后,在對話框的Menu 屬性中選擇剛才制
48、作好的對話框。(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 );參考資料:http:/msdn.micro/en-us/library/bb787605(VS.85).aspx5、給結(jié)構(gòu)體所有字段置零復(fù)習(xí)一下C 語言中memset 以及結(jié)構(gòu)體
49、的應(yīng)用。C 語言中聲明一個結(jié)構(gòu)體變量之后,在使用這個變量之前要首先用memset 來把各個位清零。使用C 語言內(nèi)置的函數(shù)memset 來完成:memset(&s1,sizeof(s1),0);C語言也能干大事如鵬網(wǎng)www.rupen 在這里我們使用ZeroMemory“函數(shù)”,ZeroMemory 其實并不是函數(shù),其實是memset 的宏定義ZeroMemory 其實就是memset,紙老虎而已,不是一個全新的函數(shù)。6、打開文件對話框的使用首先#include OPENFILENAME ofn;char szFileMAX_PATH;ZeroMemory(&ofn,sizeof(ofn);of
50、n.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)www.rupen ofn.lpstrFileTitle = NULL;ofn.nMaxFileTitle = 0;ofn.lpstrInitialDir = NULL;ofn.hwndOwner = hwnd;/自學(xué)能力、探索能力、猜
51、測能力ofn.Flags = OFN_EXPLORER |OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;if (GetOpenFileName(&ofn)MessageBox(NULL,szFile,MB_OK);參數(shù)太多只能搞Struct。下面將對這段代碼作解釋:(1)、ZeroMemory 的含義見上邊(2)char szFileMAX_PATH;/定義一個長度為MAX_PATH 的char 數(shù)組。MAX_PATH 是系統(tǒng)定義的一個宏,260。Windows 操作系統(tǒng)文件路徑的最大長度。C語言也能干大事如鵬網(wǎng)www.rupen (3)ofn.lpstrFile
52、 = szFile;/szFile 是一個字符數(shù)組,那么szFile 這個名字就代表這個字符數(shù)組的首地址(4)文件類型過濾器*.*就表示所有文件*.txt 就表示所有文本文件abc*.*就表示所有以abc 開頭的文件abc*.txt 就表示所有以abc 開頭的文本文件(txt)ofn.lpstrFilter = TEXT(ALL0*.*0Text0*.TXT0);用“0”分割出幾個段,每兩段是一組過濾器,每組的第一個段代表過濾器的顯示的值,而第二段表示真正的過濾器(5)ofn.nFilterIndex = 2;默認選擇第幾個過濾器,是1 開始的,不是0.這也是試驗出來的。(6)windows
53、的一個慣例:結(jié)構(gòu)體的指針類型別名一般是LP+結(jié)構(gòu)體的名字GetOpenFileName(&ofn)而不是GetOpenFileName(ofn),因為GetOpenFileName 函數(shù)要的是OPENFILENAME 的指針(7)用戶關(guān)閉對話框,GetOpenFileName 函數(shù)返回,返回值是BOOL,等于TRUE 表示用戶選擇了文件,如果等于FALSE 就表示用戶選擇了【取消】按鈕第三節(jié)1、GetOpenFileName希望同學(xué)們不要只記我教的結(jié)果,而是要跟著我的思路進行思考,看解決問題的方式。否則就又變成“我教同學(xué)們學(xué)”的填鴨式教育了。C語言也能干大事如鵬網(wǎng)www.rupen (2)課上
54、練習(xí):打開對話框,用戶選擇一個音樂文件,然后用MCIsendString 播放,注意ShortPath 的問題。如何讓音樂文件跟著文件走,GetModuleFileName、GetCurrentDirectory(3)打開多個文件:增加OFN_ALLOWMULTISELECT 選項后測試一下。發(fā)現(xiàn)如果選擇一個文件后顯示的還是這個文件的路徑,可是如果選擇多個文件顯示的就只有目錄的路徑,怎么回事?調(diào)試一下,看看szFile 在內(nèi)存中的樣子。調(diào)試的是發(fā)現(xiàn)內(nèi)存中的樣子是目錄的路徑然后加上各個文件名,中間用“0”分割,現(xiàn)在明白為啥值顯示目錄的路徑了嗎?大家明白這一點就可以了,有興趣的可以課后來做多文件選
55、擇的處理。做播放器的時候經(jīng)常需要這個功能,也就是播放列表。有一篇文章可以參考一下:http:/ 本來是OpenFileName 的簡寫,它SaveFileName 也跑來湊熱鬧,吼吼。如果需要保存文件覆蓋提示怎么辦呢?看看OFN 有選項嗎?OFN_OVERWRITEPROMPTMcisendstring 播放音樂,配合GetOpenFileName 實現(xiàn)播放器GetShortPathNamemciSendString(“play *”,0,NULL);C語言也能干大事如鵬網(wǎng)www.rupen Mcisendstring 更多用法(暫停、繼續(xù)、錄音、播放進度控制)參考http:/ 就是全部、VC
56、 不是唯一:C-Free、Pelles C、Dev C+、CodeBlocks。C-Free使用演示(Vista、Win7 上資源編輯器可能有問題)。學(xué)完第七節(jié)就可以開始從第一版11 節(jié)開始繼續(xù)學(xué)習(xí)了、第12 節(jié)也是舊版的,不用看。第1 版1 至10 節(jié)中還有一些在第二版中沒有講的東西,有興趣的可以去粗略的過一遍,當(dāng)然不學(xué)第一版也能繼續(xù)向后學(xué)。C 語言也能干大事第十一節(jié):Socket 網(wǎng)絡(luò)編程板書:這節(jié)課是自己動手寫QQ、自己動手寫飛鴿傳書的基礎(chǔ),以后想從事網(wǎng)絡(luò)開發(fā)、信息系統(tǒng)開發(fā)、游戲開發(fā)、嵌入式系統(tǒng)開發(fā)等的同學(xué)必須學(xué)習(xí)。演示一個簡單的和網(wǎng)易Email 服務(wù)器對話的過程。1、網(wǎng)絡(luò)基本概念講解Q
57、Q 的基本原理講解瀏覽器上網(wǎng)的基本原理服務(wù)器:Server。提供服務(wù)的計算機??蛻舳耍篊lient。和服務(wù)器端交互的一個設(shè)備。IP 地址:計算機在網(wǎng)絡(luò)中的地址。相當(dāng)于每個家庭的電話。別名、域名:www.RuPen。域名就相當(dāng)于你家的地址。問114,你家的電話(告訴地址)C語言也能干大事如鵬網(wǎng)www.rupen DNS:網(wǎng)絡(luò)中的114。Domain Name System。端口:Port。不同的程序連接服務(wù)器時候用的插座。(程序和服務(wù)器通信的時候的一個開得的一個口子)Socket(套接字):導(dǎo)線、網(wǎng)絡(luò)連接。2、WinSock、WinSocket。Socket:平臺無關(guān)的。Socket 標準。所有
58、操作系統(tǒng)都實現(xiàn)了這個標準。Send、recv。標準的。一通百通!WinSock:添加了一些Windows 獨有的函數(shù)。而且不用這些函數(shù)的話Socket 程序還跑不起來。羞臊微軟!WinSock 編程:平臺無關(guān),一通百通。WSA(Windows Socket API)Sz1.tenceSz2.tence3、LastError調(diào)用WindowsAPI 的時候,每步執(zhí)行完畢都會把執(zhí)行結(jié)果放到LastError 中去,所以應(yīng)該在函數(shù)執(zhí)行完畢立即去取。DeleteFile(f1)DeleteFile(f2)GetLastError()LastError 只能容納一個錯誤碼DeleteFile(f1)Ge
59、tLastError()DeleteFile(f2)GetLastError()錯誤碼。2233、344555FormatMessage:把錯誤碼轉(zhuǎn)換為錯誤消息。Windows 錯誤處理GetLastError1. void ShowError()2. C語言也能干大事如鵬網(wǎng)www.rupen 3. TCHAR* lpMsgBuf;4. FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER| /自動分配消息緩沖區(qū)5. FORMAT_MESSAGE_FROM_SYSTEM, /從系統(tǒng)獲取信息6. NULL,GetLastError(), /獲取錯誤信息標識7.
60、 MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT),/使用系統(tǒng)缺省語言8. (LPTSTR)&lpMsgBuf, /消息緩沖區(qū)9. 0,10. NULL);11. MessageBox(NULL,lpMsgBuf,MB_ICONERROR);12. 復(fù)制代碼在.h 中聲明函數(shù),在.c 中實現(xiàn)!都會有哪些錯誤?4、模板代碼:(1)、添加winsock2.h(2)、連接庫“wsock32”。怎么知道添加它呢?或添加預(yù)處理文件#pragmacomment(lib,ws2_32.lib)。注意:在mainDlg.h 里面添加void SocketTest();void
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 電子化的社會治理模式電子政務(wù)的新趨勢
- 農(nóng)產(chǎn)品加工與農(nóng)產(chǎn)品質(zhì)量保障考核試卷
- 獸藥批發(fā)商的商務(wù)談判技巧考核試卷
- 電商平臺購物車頁面設(shè)計的優(yōu)化策略
- 2025-2030年可穿戴人工呼吸輔助裝置企業(yè)制定與實施新質(zhì)生產(chǎn)力戰(zhàn)略研究報告
- 環(huán)境藝術(shù)設(shè)計在商業(yè)廣告中的應(yīng)用
- 2025-2030年數(shù)據(jù)中心能源管理系統(tǒng)集成行業(yè)深度調(diào)研及發(fā)展戰(zhàn)略咨詢報告
- 2025-2030年壓縮機性能提升技術(shù)行業(yè)跨境出海戰(zhàn)略研究報告
- 2025-2030年可粘貼畫布行業(yè)深度調(diào)研及發(fā)展戰(zhàn)略咨詢報告
- 2025-2030年壓力分布健康針織鞋墊行業(yè)跨境出海戰(zhàn)略研究報告
- 2024年同等學(xué)力人員申請碩士學(xué)位英語試卷與參考答案
- 臨床用血管理培訓(xùn)
- 介入手術(shù)室護理風(fēng)險
- 小學(xué)一年級數(shù)學(xué)20以內(nèi)的口算題(可直接打印A4)
- 春季安全行車教育培訓(xùn)
- 2024年6月第3套英語六級真題
- 2024年江蘇省公務(wù)員錄用考試《行測》題(A類)
- 2024年10月時政100題(附答案)
- 江蘇省無錫市2024年中考數(shù)學(xué)試卷(含答案)
- 2024年保密知識測試試題及答案(奪冠)
- 北師大版八年級下冊因式分解(分組分解法)100題及答案
評論
0/150
提交評論