版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、C干大事第三節(jié)1、怎么修改程序圖標(biāo),引入一個(gè)ico文件(可以用一些工具制作ico圖標(biāo),網(wǎng)上搜“制作ico”),然后命名ID為1,重新構(gòu)建。2、在編寫控制臺程序的時(shí)候一切流程都是有先后關(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、戶輸入一個(gè)值。但是到了Windows編程中就不一樣了,同一時(shí)刻用戶即可能點(diǎn)擊【OK】按鈕,又可能點(diǎn)擊【Cancel】按鈕,又可能在文本框中輸入幾個(gè)字,還可能在窗口上雙擊幾下,這樣就無法同時(shí)等待用戶的這些動(dòng)作。為了解決這個(gè)問題,Windows引入了消息機(jī)制(也可以叫做回調(diào)機(jī)制或者事件機(jī)制)。在程序啟動(dòng)的時(shí)候把函數(shù)func1要響應(yīng)【OK】按鈕1的點(diǎn)擊動(dòng)作、函數(shù)func2要響應(yīng)【Cancel】按鈕的點(diǎn)擊動(dòng)作、函數(shù)func3要響應(yīng)窗口的雙擊動(dòng)作等等這些信息告訴Windows,然后當(dāng)用戶執(zhí)行相應(yīng)操作的時(shí)候Windows就會來主動(dòng)調(diào)用你注冊的函數(shù),主動(dòng)通知你。不再是程序調(diào)用操作系統(tǒng)的函數(shù),而是操作系統(tǒng)反過
3、來調(diào)用你的函數(shù)。Dont call me ,Ill call you!(也被人稱為“好萊塢法則”)。2、關(guān)于上面的這個(gè)問題要慢慢來理解,下面就來通過第一個(gè)例子來初步理解這個(gè)Dont call me ,Ill call you!/HANDLE_MSG的意思就是告訴Windows,當(dāng)發(fā)生WM_COMMAND消息的時(shí)候,請/通知Main_OnCommand函數(shù)/id這個(gè)參數(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ù)按鈕被按下的時(shí)候Main_OnCommand方法被調(diào)用,hwnd是對話框句柄(什么是句柄后面講,通俗的說就是通過它能夠操縱對話框),id是控件的id,后兩個(gè)參數(shù)暫時(shí)不關(guān)心。Main_
5、OnCommand方法中根據(jù)id,也就是被點(diǎn)擊按鈕的名字來決定不同的動(dòng)作。Hwnd是當(dāng)前窗口的句柄,句柄就是把柄!操作一個(gè)東西,要先抓住他的把柄!通過句柄就可以操作這個(gè)對象。/不要忘了break/不要忘了case中用大括號3、定制自己的對話框,不同的按鈕不同的問好然后重新添加一個(gè)自己的按鈕,在屬性中修改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)擊“問好”按鈕,咱們第一個(gè)響應(yīng)按鈕動(dòng)作的程序就做好了。4、自己動(dòng)手寫計(jì)算器1.0版(1)、得到控件中用戶輸入的文本GetDlgItemText(hwnd,IDC_EDTNAME,str,sizeof(str);第一個(gè)參數(shù)是對話框的句柄;第二參數(shù)就
7、是控件的id(name);第三個(gè)參數(shù)就是字符串?dāng)?shù)組的指針;疑問:為什么不能像MessageBox一樣把字符串做為返回值返回呢?這就涉及到C語言中函數(shù)返回指針的問題了在函數(shù)內(nèi)部返回函數(shù)內(nèi)構(gòu)建的指針有可能出現(xiàn)數(shù)據(jù)混亂.當(dāng)f1函數(shù)在執(zhí)行的時(shí)候,這段內(nèi)存是被占用的,一旦函數(shù)返回,那么內(nèi)存就標(biāo)記為可以被其他人、函數(shù)占用。如果你把這段內(nèi)存中的指針返回了,那么一旦其他地方用了這段內(nèi)存,那么你引用的就是錯(cuò)誤的數(shù)據(jù)了。用GetWindowText、GetDlgItemText的時(shí)候?yàn)槭裁匆獋鲾?shù)組名呢?復(fù)習(xí):初學(xué)者可以認(rèn)為數(shù)組名就是指針,函數(shù)只有得到指針,才能直接操作數(shù)組中的數(shù)據(jù)。(2)c語言中字符串連接:wsp
8、rintf(str,”.”,a1,a2);還有sprintf,但是在編寫windows程序的時(shí)候最好使用wsprintf。/GetDlgItemText(hwnd,IDC_EDITNAME,str,sizeof(str);/第一參數(shù)是窗口的句柄,第二個(gè)參數(shù)是要取得內(nèi)容的控件的ID/第三個(gè)參數(shù)就是字符串指針,第四個(gè)參數(shù)就是指針指向區(qū)域的大小TCHAR name256;/為什么不用strlen,sizeof。/如鵬網(wǎng)站內(nèi)搜索搜“strlen,sizeof”區(qū)別/Windows編程中一般都用TCHAR代替char。TCHAR有時(shí)候就是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程序的時(shí)候用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程序的時(shí)候最好用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:/取第一個(gè)文本框的字符串,然后得到整數(shù)表示/ 取第二個(gè)文本框的字符串,然后得到整數(shù)表示/計(jì)算兩個(gè)整數(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;/不能夢想著直接定義兩個(gè)int類型的參數(shù),就讓windows告訴你兩個(gè)數(shù)的值TCHAR str1256;TCHAR str2256;GetDlgItemText(hwnd,IDC_EDIT1,str1,sizeof(str1); GetDlgItemText(hwnd,IDC_EDIT2,str2,sizeof(str2);/兩個(gè)字符串不能直接相加,要先轉(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ù),第三個(gè)參數(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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 好的故事課件
- 2024年淮北職業(yè)技術(shù)學(xué)院高職單招職業(yè)技能測驗(yàn)歷年參考題庫(頻考版)含答案解析
- 武術(shù)五步拳身體素質(zhì)練習(xí)教學(xué)設(shè)計(jì)
- 2024年海南健康管理職業(yè)技術(shù)學(xué)院高職單招職業(yè)技能測驗(yàn)歷年參考題庫(頻考版)含答案解析
- 【核心素養(yǎng)】37核能-浙教版科學(xué)九上探究學(xué)案(原卷版)
- 2024年浙江體育職業(yè)技術(shù)學(xué)院高職單招職業(yè)適應(yīng)性測試歷年參考題庫含答案解析
- 2024年泰山職業(yè)技術(shù)學(xué)院高職單招職業(yè)技能測驗(yàn)歷年參考題庫(頻考版)含答案解析
- 2024年陽曲縣精神病醫(yī)院高層次衛(wèi)技人才招聘筆試歷年參考題庫頻考點(diǎn)附帶答案
- 2024年河南建筑職業(yè)技術(shù)學(xué)院高職單招職業(yè)適應(yīng)性測試歷年參考題庫含答案解析
- 2024年河北公安警察職業(yè)學(xué)院高職單招職業(yè)適應(yīng)性測試歷年參考題庫含答案解析
- 公司費(fèi)用預(yù)算表格模板(詳細(xì)版)
- 華為經(jīng)營管理-華為市場營銷體系(6版)
- 2023年中國育齡女性生殖健康研究報(bào)告
- 鋼結(jié)構(gòu)加工廠考察報(bào)告
- 發(fā)電機(jī)檢修作業(yè)指導(dǎo)書
- 薪酬與福利管理實(shí)務(wù)-習(xí)題答案 第五版
- 廢舊物資處置申請表
- GB/T 37234-2018文件鑒定通用規(guī)范
- GB/T 31888-2015中小學(xué)生校服
- 質(zhì)量檢查考核辦法
- 云南省普通初中學(xué)生成長記錄-基本素質(zhì)發(fā)展初一-初三
評論
0/150
提交評論