版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、C干大事第三節(jié)1、怎么修改程序圖標(biāo),引入一個ico文件(可以用一些工具制作ico圖標(biāo),網(wǎng)上搜“制作ico”),然后命名ID為1,重新構(gòu)建。2、在編寫控制臺程序的時候一切流程都是有先后關(guān)系、并行的,而且所有函數(shù)都是由我們來調(diào)用的,比如下面的實(shí)例性代碼:printf(確定請輸入y,取消輸入n);char c = getchar();/scanfif(c=y)/else if(c=n)/Void func1()MessageBox(NULL,TEXT(“按鈕1被按下了”).);Void func2()MessageBox(NULL,TEXT(“按鈕2被按下了”).);我們可以用getchar來等待用
2、戶輸入一個值。但是到了Windows編程中就不一樣了,同一時刻用戶即可能點(diǎn)擊【OK】按鈕,又可能點(diǎn)擊【Cancel】按鈕,又可能在文本框中輸入幾個字,還可能在窗口上雙擊幾下,這樣就無法同時等待用戶的這些動作。為了解決這個問題,Windows引入了消息機(jī)制(也可以叫做回調(diào)機(jī)制或者事件機(jī)制)。在程序啟動的時候把函數(shù)func1要響應(yīng)【OK】按鈕1的點(diǎn)擊動作、函數(shù)func2要響應(yīng)【Cancel】按鈕的點(diǎn)擊動作、函數(shù)func3要響應(yīng)窗口的雙擊動作等等這些信息告訴Windows,然后當(dāng)用戶執(zhí)行相應(yīng)操作的時候Windows就會來主動調(diào)用你注冊的函數(shù),主動通知你。不再是程序調(diào)用操作系統(tǒng)的函數(shù),而是操作系統(tǒng)反過
3、來調(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的消息機(jī)制。void Main_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNot
4、ify)switch(id)case IDC_OK:MessageBox(hwnd,TEXT(歡迎訪問如鵬網(wǎng)/doc/13878d160b4e767f5acfcece.html大學(xué)生計(jì)算機(jī)學(xué)習(xí)社區(qū)),TEXT(問好),MB_OK);break;default:break;不同的控件要有不同的id,控件的名字,在人類.中名字有可能重名,但是在windows中id 不能重復(fù)按鈕被按下的時候Main_OnCommand方法被調(diào)用,hwnd是對話框句柄(什么是句柄后面講,通俗的說就是通過它能夠操縱對話框),id是控件的id,后兩個參數(shù)暫時不關(guān)心。Main_
5、OnCommand方法中根據(jù)id,也就是被點(diǎn)擊按鈕的名字來決定不同的動作。Hwnd是當(dāng)前窗口的句柄,句柄就是把柄!操作一個東西,要先抓住他的把柄!通過句柄就可以操作這個對象。/不要忘了break/不要忘了case中用大括號3、定制自己的對話框,不同的按鈕不同的問好然后重新添加一個自己的按鈕,在屬性中修改Name屬性為IDC_BTNHELLO??丶值臐撘?guī)則:所有控件的Name都以“IDC_”開頭,然后后邊跟著控件類型的簡稱(按鈕簡稱BTN、文本框簡稱EDT等等),最后才是控件的真正的名字。修改按鈕的Caption屬性(也就是按鈕上顯示的文字)為“問好”。編輯Main_OnCommand方法:
6、void Main_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify) switch(id)case IDC_BTNHELLO:MessageBox(NULL,TEXT(世界你好),TEXT(問好),MB_OK);break;/不要忘記breakdefault:break;運(yùn)行程序,點(diǎn)擊“問好”按鈕,咱們第一個響應(yīng)按鈕動作的程序就做好了。4、自己動手寫計(jì)算器1.0版(1)、得到控件中用戶輸入的文本GetDlgItemText(hwnd,IDC_EDTNAME,str,sizeof(str);第一個參數(shù)是對話框的句柄;第二參數(shù)就
7、是控件的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)存就標(biāo)記為可以被其他人、函數(shù)占用。如果你把這段內(nèi)存中的指針返回了,那么一旦其他地方用了這段內(nèi)存,那么你引用的就是錯誤的數(shù)據(jù)了。用GetWindowText、GetDlgItemText的時候?yàn)槭裁匆獋鲾?shù)組名呢?復(fù)習(xí):初學(xué)者可以認(rèn)為數(shù)組名就是指針,函數(shù)只有得到指針,才能直接操作數(shù)組中的數(shù)據(jù)。(2)c語言中字符串連接:wsp
8、rintf(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。/如鵬網(wǎng)站內(nèi)搜索搜“strlen,sizeof”區(qū)別/Windows編程中一般都用TCHAR代替char。TCHAR有時候就是char。/解決Unicode、中文編碼問題。GetDlgItem
9、Text(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代替sprintf /解決中文等問題wsprintf(msg,%s你好,name);MessageBox(hwnd,msg,msg,MB_OK);(3)向用戶問好
10、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 int(5)編寫windows程序的時候最好用TCHAR來代替char,可以避免中文的問題case IDC_BTNHELLO:TCHAR name256;GetDlgItemText(hwnd,IDC_EDTNAME,name,si
11、zeof(name)/sizeof(TCHAR); int i = atoi(name);int j=i*2;TCHAR result256;itoa(j,result,10);MessageBox(hwnd,result,TEXT(問好),MB_OK);(6)Get、Set:配對的,設(shè)置對話框的值用SetDlgItemText:代碼:case IDC_BTNADD:/取第一個文本框的字符串,然后得到整數(shù)表示/ 取第二個文本框的字符串,然后得到整數(shù)表示/計(jì)算兩個整數(shù)的和/把和重新轉(zhuǎn)換成字符串,然后Messagebox出來。TCHAR cNumber1256;GetDlgItemText(hwn
12、d,IDC_EDTNUM1,cNumber1,sizeof(cNumber1)/sizeof(TCHA R);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
13、 i1;/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標(biāo)準(zhǔn)庫函數(shù):atoi,a:asciito i:int 理解了atoi的簡寫不用死記硬背了int i1=atoi(str1);int i2=atoi(str2);int i3=i1+i2;/printf(%i,i3);TCHAR str3256;itoa(i3,str3,2);/字符串轉(zhuǎn)換為整數(shù),第三個參數(shù)就是進(jìn)制。/wsprintf(str3,%i,i3);SetDlgItemText(hwnd,IDC_EDIT3,str3);(7)代碼中有UINT、TCHAR、LRESULT、HWND之類的新的數(shù)據(jù)類型,其實(shí)它們只是一些類型的別名而已,可以通過宏定義看出來。但是考慮到可移植性,盡量不要使用它們的真實(shí)類型。
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年高級會籍年費(fèi)支付協(xié)議3篇
- 2025版酒店裝修施工材料運(yùn)輸及倉儲合同3篇
- 2025年度食堂食材物流配送合同2篇
- 二零二五年度體育設(shè)施PPP項(xiàng)目合作協(xié)議3篇
- 盆腔引流管的護(hù)理
- 2024年短期商務(wù)汽車租賃合同模板版B版
- 二零二五年度個人信用消費(fèi)分期付款合同3篇
- 二零二五年國際貿(mào)易FOB價格條款合同模板:風(fēng)險(xiǎn)控制與合規(guī)3篇
- 2025版網(wǎng)絡(luò)安全產(chǎn)品個人眾籌合作合同3篇
- 二零二五年度2025版?zhèn)€人住房按揭車輛轉(zhuǎn)讓及保險(xiǎn)配套服務(wù)合同范本3篇
- 2025屆高考語文復(fù)習(xí):散文的結(jié)構(gòu)與行文思路 課件
- 審計(jì)工作述職報(bào)告
- 廣東省廣州海珠區(qū)2023-2024學(xué)年八年級上學(xué)期期末物理試卷(含答案)
- 【MOOC】工程材料學(xué)-華中科技大學(xué) 中國大學(xué)慕課MOOC答案
- 銀行貸款保證合同范本
- 《汽車膠粘劑》課件
- 手繪pop教學(xué)課件
- 2024腦血管病指南
- 企業(yè)三年?duì)I銷規(guī)劃
- 2024年社區(qū)工作者考試試題庫
- 工廠設(shè)備工程師年終總結(jié)
評論
0/150
提交評論