版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、C 語言也能干大事第一節(jié)板書:1、C 語言不是只能開發(fā)黑底白字的控制臺界面程序。學習本課的基礎:本課程不講C 語言基礎知識,C 語言考及格,學的過程中配合復習,有不懂的回去翻書。2、學完本課程以后同學們做的一些作品賞析:計算器、俄羅斯方塊、音樂播放器、學生管理系統(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)絡程
2、序、網(wǎng)站程序等。C 語言什么都可以開發(fā)3、準備工作,安裝VC6(在網(wǎng)上搜“Visual C+ 6”,找合適的地址下載)。VC6 在Vista、Windows 下啟動可能有兼容性提示。3、開始做第一個C 語言的程序【文件】【新建】,打開【工程】選項頁,選擇【W(wǎng)in32 Application】(不要選錯了),在“位置”中修改工程保存的路徑。(以前用Tubor C 的同學會問“什么叫工程?”。在以前大家用TurboC 寫的程序一般也就是一個文件,但是用C 語言寫大程序的時候不可能把所有的代碼都寫在一個文件中,肯定要寫很多文件?!肮こ蹋≒roject)”就是這些文件的一個集合。)在“工程名”中寫入你
3、為這個工程取的名字,最好有一定意義。下一步【一個簡單的Windows 程序】4、向Windows 的世界問好MessageBox(NULL,TEXT(世界你好),TEXT(問好),MB_OK);VC6 在Vista、Windows 下編譯調試時可能有兼容性提示。C語言也能干大事如鵬網(wǎng)www.rupen 5、學本課程常見問題(1)為什么不用TurboC?Turbo C(Win-TC)太老了,界面還是DOS 界面,庫也是DOS 的庫,沒有網(wǎng)絡開發(fā)包、沒有Windows 界面開發(fā)包。TC 只能用來學C 的基礎,要進行實際開發(fā)必須使用先進一點的工具。還是讓TurboC 進博物館吧。(2)為什么不用更高
4、版本的VC?我們不使用高版本的VC 主要是如下考慮:VC6 和高版本的VC 沒有本質區(qū)別(VC6 是1998 年的東西,大部分人、公司還是用VC6,市面上的書也都是用VC6),只不過是升級了一下C+的版本、STL 的版本而已,對咱們這次學習沒有什么影響;VC6 的操作方式和VC2008 非常相似,用熟了VC6 再學高版本的VC 只用半小時而已;高版本的VC 體積太大,要五六百兆,而上面給出的VC6 只有100MB。VC2008 下建立工程。(3)學C 語言還是學其他語言,用其他語言實現(xiàn)豈不是更好?用最熟悉的語言深入編程的各個領域(網(wǎng)絡、數(shù)據(jù)庫、圖形學、內核等),一通百通,一切語言都是紙老虎。參
5、考資料如鵬網(wǎng)首頁。6、深入研究MessageBox(1)MessageBox(NULL,TEXT(世界你好),TEXT(問好),MB_OK);第一個參數(shù)暫時不講;第二個是正文;第三個是標題(Caption);第四個是類型。MB_OK 就是表示有一個OK 按鈕【確定】)TEXT 是一個宏,當字符串中有中文的時候最好用TEXT 來包圍這個字符串,雖然C語言也能干大事如鵬網(wǎng)www.rupen 不使用TEXT 在VC6 中沒問題,但是在VC7 中有問題,而且微軟也建議使用TEXT宏,因此在涉及到中文的場合要使用它。他的作用就是把中文轉化成不會亂碼的格式。(暫時這么認為)。_T(問好),其實_T 只是T
6、EXT 的一個縮寫而已。而且_T 在有的低版本里不識別。TEXT()低版本也識別。暫時不用關心TEXT 的細節(jié)。換個樣子:MessageBox(NULL, TEXT(世界你好), TEXT(你好),MB_OKCANCEL);可從設置希望在對話框中顯示的按鈕:#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也可以設置對話框中顯示的圖標:#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)兩種效果的組合形式”,那么你未來只會成為一個代碼工人。我們要思考一下其背后的原理?!皘”是什么意思?“|”是位運算里的“或”運算,只有對應的兩個二進位有一位為1 時,結果位才為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ù)值進行或運算后能分別保留各自的部分,也就是在結果值中同時體現(xiàn)兩組的取值。這種風格叫“掩碼”,在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 盤!”;如果點擊【否】,則彈出對話框(有【重試】、【取消】兩個按鈕)“嘗試把你變成好人失敗,是否重試?”。別把教學視頻當電影看!多練!多寫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 程序有什么前途?不要急于求成,用自己最熟悉的語言探索編程的各個方面,內核級開發(fā)、數(shù)據(jù)庫、網(wǎng)絡、動態(tài)網(wǎng)站開發(fā)等。學C 語言也能干大事的目的并不是直接找開發(fā)Windows 程序的工作,只要鍛煉了動手能力和一通百通的數(shù)據(jù)庫、網(wǎng)絡、動態(tài)網(wǎng)站開發(fā)、面向對象等技能,學什么東西、找什么工作都很輕松。(2)學MFC 不是更好?MFC 亂七八糟的東西太多,隱藏了太多,隱藏不僅沒有有利于初學者學習,反而使得更復雜。MFC 只是一個稍微封裝的SDK,學會了這里的課程如果又需要再去學MFC 的話會發(fā)現(xiàn)90%是相同的。http:/www.rupen/forum/thread-3
15、38-1-1.html3、對話框中圖片資源的應用在資源視圖中,選擇“引入”,然后文件過濾器選擇“*.*”,找到bmp 圖片文件。選中圖片空間,要點擊邊緣。拖一個IMAGE 控件過來,并且修改IMAGE 控件的Type 屬性為BitMap,在控件的Image 屬性中選擇剛才添加的BITMAP 資源。jpg 的格式怎么轉換為bmp 格式的呢?用畫圖工具(mspaint)。圖片被編譯到了程序中,不再依賴于源文件4、菜單資源制作好菜單資源后,在對話框的Menu 屬性中選擇剛才制作好的對話框。子菜單項(選中【彈出】)、快捷鍵(在要擔當快捷鍵的字母前加&)、分隔符5、只有控件、菜單,可以點擊控件、菜單以后
16、的動作怎么做呢?就要寫代碼了。后面會講C 語言也能干大事第三節(jié)板書:1、怎么修改程序圖標,引入一個ico 文件(可以用一些工具制作ico 圖標,網(wǎng)上搜“制作ico”),然后命名ID 為1,重新構建。C語言也能干大事如鵬網(wǎng)www.rupen 2、在編寫控制臺程序的時候一切流程都是有先后關系、并行的,而且所有函數(shù)都是由我們來調用的,比如下面的實例性代碼: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 引入了消息機制(也可以叫做回調機制或者事件機制)。在程序啟動的時候把函數(shù)func1 要響應【OK】按鈕1 的點擊動作、函數(shù)func2 要響應【Cancel】按鈕的點擊動作、函數(shù)func3 要響應窗口的雙擊動
18、作等等這些信息告訴Windows,然后當用戶執(zhí)行相應操作的時候Windows 就會來主動調用你注冊的函數(shù),主動通知你。不再是程序調用操作系統(tǒng)的函數(shù),而是操作系統(tǒng)反過來調用你的函數(shù)。Dont call me ,Ill call you!(也被人稱為“好萊塢法則”)。2、關于上面的這個問題要慢慢來理解,下面就來通過第一個例子來初步理解這個Dont call me ,Ill call you!/HANDLE_MSG 的意思就是告訴Windows,當發(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 大學生計算機學習社區(qū)),TEXT(問好),MB_OK);break;default:break;C語言也能干大事如鵬網(wǎng)www.rupen 不同的控件要有不同的id,控件的名字,在人類社會中名字有可能重名,但是在windows 中id 不能重復按鈕被按下
20、的時候Main_OnCommand 方法被調用,hwnd 是對話框句柄(什么是句柄后面講,通俗的說就是通過它能夠操縱對話框),id 是控件的id,后兩個參數(shù)暫時不關心。Main_OnCommand 方法中根據(jù)id,也就是被點擊按鈕的名字來決定不同的動作。Hwnd 是當前窗口的句柄,句柄就是把柄!操作一個東西,要先抓住他的把柄!通過句柄就可以操作這個對象。/不要忘了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、鈕,咱們第一個響應按鈕動作的程序就做好了。4、自己動手寫計算器1.0 版(1)、得到控件中用戶輸入的文本GetDlgItemText(hwnd,IDC_EDTNAME,str,sizeof(str);C語言也能干大事如鵬網(wǎng)www.rupen 第一個參數(shù)是對話框的句柄;第二參數(shù)就是控件的id(name);第三個參數(shù)就是字符串數(shù)組的指針;疑問:為什么不能像MessageBox 一樣把字符串做為返回值返回呢?這就涉及到C 語言中函數(shù)返回指針的問題了在函數(shù)內部返回函數(shù)內構建的指針有可能出現(xiàn)數(shù)據(jù)混亂.當f1 函數(shù)在執(zhí)行的時候,這段內存是被占用的,一旦函數(shù)返回,那么內存就標記為可以被其他人、函數(shù)占用。如果
23、你把這段內存中的指針返回了,那么一旦其他地方用了這段內存,那么你引用的就是錯誤的數(shù)據(jù)了。用GetWindowText、GetDlgItemText 的時候為什么要傳數(shù)組名呢?復習:初學者可以認為數(shù)組名就是指針,函數(shù)只有得到指針,才能直接操作數(shù)組中的數(shù)據(jù)。(2)c 語言中字符串連接:wsprintf(str,”.”,a1,a2);還有sprintf,但是在編寫windows 程序的時候最好使用wsprintf。/GetDlgItemText(hwnd,IDC_EDITNAME,str,sizeof(str);/第一參數(shù)是窗口的句柄,第二個參數(shù)是要取得內容的控件的ID/第三個參數(shù)就是字符串指針,第
24、四個參數(shù)就是指針指向區(qū)域的大小TCHAR name256;/為什么不用strlen,sizeof。C語言也能干大事如鵬網(wǎng)www.rupen /如鵬網(wǎng)站內搜索搜“strlen,sizeof”區(qū)別/Windows 編程中一般都用TCHAR 代替char。TCHAR 有時候就是char。/解決Unicode、中文編碼問題。GetDlgItemText(hwnd,IDC_EDITNAME,name,sizeof(name);/printf 是打印到屏幕上/printf(%s 你好,name);/sprintf 是打印到字符串中/相當于很多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 語言里邊字符串轉換為數(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:配對的,設置對話框的值用SetDlgItemText:代碼:case IDC_BTNADD:/取第一個文本框的字符串,然后得到整數(shù)表示/ 取第二個文本框的字符串,然后得到整數(shù)表示/計算兩個整數(shù)的和/把和重新轉換成字符串,然后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);/兩個字符串不能直接相加,要先轉換成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);/字符串轉換為整數(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ù)的二進制形式。做一個十進制到二進制的轉換小工具。(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ù)的二進制形式。做一個十進制到二進制的轉換小工具。(10)作業(yè):計算兩個數(shù)的差。不要總認為看很多書、學高深技術、看很多視頻就是牛人,能把一個最簡單的程序快速寫出來的才是牛人?。?1)思考:這個計算兩個數(shù)的和程序有什么缺陷?沒有阻止用戶輸入非數(shù)字。怎么解決。調試的技巧,斷點:執(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 用來標識被應用程序所建立或使用的對象的唯一整數(shù),WINDOWS 使用各種各樣的句柄標識諸如應用程序實例、窗口、圖片、圖標等等??丶浔涂丶d 的區(qū)別:控件句柄在每次運行的時候都是不一樣的,而控件id 則是確定的。ComboBox_AddString 等幾
38、乎所有控件函數(shù)都可以對整個Windows 中的控件進行控制(有的游戲外掛的原理),在一個對話框內id 不能重復,但是在不同的對話框內則可以重復,因此需要一個全局的不重復的句柄來表示控件,通過對話框+id 聯(lián)合確定。兩個不同的程序(哪怕是同一個程序啟動的兩個不同的實例,開兩個記事本)是找到我爸,然后找我父親的id=1 的兒子,也就是我,然后再打我。這就是通過我父親的把柄和我的id=1 來定義我GetDlgItem 由對話框句柄+id 得到控件的句柄。Main_OnInitDialog 對話框初始化的時候被調用。做一個例子(2) 確定目前選項的索引:int ComboBox_GetCurSel(H
39、WND hwndCtl);Cur:CurrentSel:Selection 返回值是當前項的編號,從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 設定為-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。額外知識,不講,自學(不想變成填鴨式教育,課上只講思想性的東西,會給大家學習資料,希望大家培養(yǎng)自學能力)實現(xiàn)四則運算器:作業(yè)(1)給本
41、節(jié)課的小練習提改進建議并且自己實現(xiàn)。(2)學生管理系統(tǒng)(畫原型界面布置)增、刪、查(雙擊)、搜C語言也能干大事如鵬網(wǎng)www.rupen 多練手,光聽視頻什么用都沒有,浪費時間,必須練手,再簡單的代碼也要自己寫,不要眼高手低!你沒有多牛XC 語言也能干大事第六節(jié)板書:上節(jié)課作業(yè):學生管理系統(tǒng)(畫原型界面布置)增、刪、查(雙擊)、搜接下來我們要實現(xiàn)小時鐘。涉及到的主要知識點是定時器的使用,涉及到的C 知識就是函數(shù)指針(回調函數(shù))使用定時器回調就是不是你調別人,而是別人調你。時間到了會叫你,沒到的時候不會煩你。讓Windows 直接將定時器消息發(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、得到當前日期:void GetLocalTime(LPSYSTEMTIME);課上練習: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è):定時關機、定時關閉顯示器,如何編程實現(xiàn)關機、關顯示器。到整天播放音樂。自學!“關閉顯示器API”、“關閉顯示器函數(shù)”9、取得復選按鈕的是否選中:LRESULT Button_GetCheck(HWND hwndCtl);BST_CHECKED BST_UNCHECKEDC語言也能干大事如鵬網(wǎng)www.rupen 設置復選按鈕是否選中: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 設定為-1 則取消所有選擇(5) 確定目前選項的索引:int ListBox_GetCurSel(HWND hwndCtl); 如果沒有項目被選中,那么從呼叫中傳回的iIndex 值為LB_ERR。(6)將某項目復制到文字緩沖區(qū)中:int ListBox_GetText(HWND hwndCtl, int index, LPCTSTR lpszBuffer);C語言也能干大事如鵬網(wǎng)www.rupen 9、菜單資源(1)制作好菜單資源后,在對話框的Menu 屬性中選擇剛才制
48、作好的對話框。(2)響應菜單操作。菜單點擊后也會發(fā)送WM_COMMAND 消息id 就是被選擇菜單的id。例子:case IDM_QUIT:EndDialog(hwnd,id);作業(yè):文件操作。自己動手寫記事本。路徑寫固定的路徑。下節(jié)課內容:作業(yè)點評,文件對話框、播放音樂C 語言也能干大事第七節(jié)板書:作業(yè)點評: 文件操作。自己動手寫記事本。RichEdit 控件。LoadLibrary( riched32.dll );參考資料:http:/msdn.micro/en-us/library/bb787605(VS.85).aspx5、給結構體所有字段置零復習一下C 語言中memset 以及結構體
49、的應用。C 語言中聲明一個結構體變量之后,在使用這個變量之前要首先用memset 來把各個位清零。使用C 語言內置的函數(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;/自學能力、探索能力、猜
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、的一個慣例:結構體的指針類型別名一般是LP+結構體的名字GetOpenFileName(&ofn)而不是GetOpenFileName(ofn),因為GetOpenFileName 函數(shù)要的是OPENFILENAME 的指針(7)用戶關閉對話框,GetOpenFileName 函數(shù)返回,返回值是BOOL,等于TRUE 表示用戶選擇了文件,如果等于FALSE 就表示用戶選擇了【取消】按鈕第三節(jié)1、GetOpenFileName希望同學們不要只記我教的結果,而是要跟著我的思路進行思考,看解決問題的方式。否則就又變成“我教同學們學”的填鴨式教育了。C語言也能干大事如鵬網(wǎng)www.rupen (2)課上
54、練習:打開對話框,用戶選擇一個音樂文件,然后用MCIsendString 播放,注意ShortPath 的問題。如何讓音樂文件跟著文件走,GetModuleFileName、GetCurrentDirectory(3)打開多個文件:增加OFN_ALLOWMULTISELECT 選項后測試一下。發(fā)現(xiàn)如果選擇一個文件后顯示的還是這個文件的路徑,可是如果選擇多個文件顯示的就只有目錄的路徑,怎么回事?調試一下,看看szFile 在內存中的樣子。調試的是發(fā)現(xiàn)內存中的樣子是目錄的路徑然后加上各個文件名,中間用“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 上資源編輯器可能有問題)。學完第七節(jié)就可以開始從第一版11 節(jié)開始繼續(xù)學習了、第12 節(jié)也是舊版的,不用看。第1 版1 至10 節(jié)中還有一些在第二版中沒有講的東西,有興趣的可以去粗略的過一遍,當然不學第一版也能繼續(xù)向后學。C 語言也能干大事第十一節(jié):Socket 網(wǎng)絡編程板書:這節(jié)課是自己動手寫QQ、自己動手寫飛鴿傳書的基礎,以后想從事網(wǎng)絡開發(fā)、信息系統(tǒng)開發(fā)、游戲開發(fā)、嵌入式系統(tǒng)開發(fā)等的同學必須學習。演示一個簡單的和網(wǎng)易Email 服務器對話的過程。1、網(wǎng)絡基本概念講解Q
57、Q 的基本原理講解瀏覽器上網(wǎng)的基本原理服務器:Server。提供服務的計算機??蛻舳耍篊lient。和服務器端交互的一個設備。IP 地址:計算機在網(wǎng)絡中的地址。相當于每個家庭的電話。別名、域名:www.RuPen。域名就相當于你家的地址。問114,你家的電話(告訴地址)C語言也能干大事如鵬網(wǎng)www.rupen DNS:網(wǎng)絡中的114。Domain Name System。端口:Port。不同的程序連接服務器時候用的插座。(程序和服務器通信的時候的一個開得的一個口子)Socket(套接字):導線、網(wǎng)絡連接。2、WinSock、WinSocket。Socket:平臺無關的。Socket 標準。所有
58、操作系統(tǒng)都實現(xiàn)了這個標準。Send、recv。標準的。一通百通!WinSock:添加了一些Windows 獨有的函數(shù)。而且不用這些函數(shù)的話Socket 程序還跑不起來。羞臊微軟!WinSock 編程:平臺無關,一通百通。WSA(Windows Socket API)Sz1.tenceSz2.tence3、LastError調用WindowsAPI 的時候,每步執(zhí)行完畢都會把執(zhí)行結果放到LastError 中去,所以應該在函數(shù)執(zhí)行完畢立即去取。DeleteFile(f1)DeleteFile(f2)GetLastError()LastError 只能容納一個錯誤碼DeleteFile(f1)Ge
59、tLastError()DeleteFile(f2)GetLastError()錯誤碼。2233、344555FormatMessage:把錯誤碼轉換為錯誤消息。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. 復制代碼在.h 中聲明函數(shù),在.c 中實現(xiàn)!都會有哪些錯誤?4、模板代碼:(1)、添加winsock2.h(2)、連接庫“wsock32”。怎么知道添加它呢?或添加預處理文件#pragmacomment(lib,ws2_32.lib)。注意:在mainDlg.h 里面添加void SocketTest();void
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 數(shù)學備課組學期工作計劃合集五篇
- 旅館滅火應急預案(6篇)
- 文化藝術節(jié)開幕詞(6篇)
- 感恩主題國旗下講話稿
- 瑜伽椅開肩課程設計
- 總經(jīng)理年會發(fā)言稿
- 2024年版車輛駕駛承攬協(xié)議版B版
- 直流潮流法課程設計
- 2025年山東淄博淄川區(qū)事業(yè)單位青年人才公開招聘50人歷年管理單位筆試遴選500模擬題附帶答案詳解
- 2025年山東濟寧孔子國際學校教師招考管理單位筆試遴選500模擬題附帶答案詳解
- 國家開放大學電大《小學語文教學研究》形考任務3-4試題及答案
- 通用勞務合同Word模板下載(多份)
- 第七講 磁電選
- 英語主格賓格及其練習題
- 三七種植項目可行性方案
- 國內外河湖生態(tài)保護與修復技術標準進展綜述
- 室內墻面噴涂與涂飾
- Unit2HowoftendoyouexerciseSectionA(1a-2d)教案人教版英語八年級上冊
- 光伏電站事故處理規(guī)程
- 山東專升本計算機-演示文稿軟件-Powerpoint-2010課件(新版考試大綱)
- 親子鑒定內容 報告書范本
評論
0/150
提交評論