版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第四章數(shù)據(jù)處理4.1控件4.2計(jì)算三角函數(shù)實(shí)例程序4.3三角函數(shù)程序解釋4.4小結(jié)
4.1控件
這里,回顧一下CreateWindow過程,該過程的調(diào)用將導(dǎo)致WM_CREATE消息的產(chǎn)生,其原型如下:第一章中已經(jīng)詳細(xì)地介紹了該過程。這里補(bǔ)充一點(diǎn)的是如果lpClassName取WindowsCE系統(tǒng)預(yù)定義的控件(類名)時(shí),這里的預(yù)定義是指不需要對(duì)這些控件進(jìn)行注冊(cè)窗口類的操作了。對(duì)應(yīng)著每個(gè)控件都有其獨(dú)特的樣式dwStyle,同時(shí)它們也支持普通窗口的樣式。使用CreateWindow創(chuàng)建控件時(shí),hMenu必須輸入相應(yīng)控件的ID號(hào)。點(diǎn)擊這些控件時(shí)一般都將導(dǎo)致WM_COMMAND消息的產(chǎn)生,并通過該消息的LOWORD(wParam)返回控件的ID號(hào)。下面對(duì)預(yù)定義的控件及其樣式逐一闡述。由上述內(nèi)容可知,如果創(chuàng)建如圖4-2所示的“計(jì)算”按鈕控件,則可以用以下語句實(shí)現(xiàn):
CreateWindow(TEXT(“BUTTON”),
??TEXT(“計(jì)算”),
??BS_PUSHBUTTON|BS_NOTIFY|WS_VISIBLE|WS_CHILD,
125,130,70,25,hWnd,(HMENU)IDC_PUSHBTN,hInst,NULL);
即在邏輯坐標(biāo)(相對(duì)于控件所在窗口的左上角的坐標(biāo))點(diǎn)(125,130)處,畫一個(gè)寬70、高25的下壓按鈕控件,控件上顯示標(biāo)題文本為“計(jì)算”。
4.2計(jì)算三角函數(shù)實(shí)例程序
計(jì)算三角函數(shù)的實(shí)例程序開發(fā)環(huán)境和運(yùn)行結(jié)果如圖4-1至圖4-4所示。圖4-1工作環(huán)境
圖4-2求正弦值運(yùn)行結(jié)果圖4-3求余弦值運(yùn)行結(jié)果
圖4-4求正切值運(yùn)行結(jié)果4.2.1頭文件myTrigonometry.h4.2.2主程序入口文件myTrigonometry.cpp4.2.3主窗口過程文件mainWndProc.cpp4.2.4子窗口過程文件sinChildWndProc.cpp
4.3三角函數(shù)程序解釋
如前所述,求解三角函數(shù)實(shí)例包括四個(gè)文件:頭文件myTrigonometry.h、主程序文件myTrigonometry.cpp、主窗口過程文件mainWndProc.cpp、子窗口過程文件sinChildWndProc.cpp。下面對(duì)比著第一章的框架程序和第二章的程序依次講述本實(shí)例的四個(gè)程序文件,首先是頭文件的介紹。頭文件除了包括windows.h和commctrl.h之外,還增加了數(shù)學(xué)函數(shù)庫頭文件math.h和智能手機(jī)SDK頭文件aygshell.h,這兩個(gè)頭文件是智能手機(jī)PocketPC上專用的頭文件。這兩個(gè)頭文件位于如圖4-5所示的文件夾中。圖4-5PocketPC頭文件夾打開math.h頭文件后,可以看到如下的代碼,并且只有這么多代碼:
#ifndef_MATH_H_
#define_MATH_H_
#include“stdlib.h”
#endif//_MATH_H_從上面的代碼可以看出,WindowsCE中math.h頭文件實(shí)際上是stdlib.h頭文件。我們展示給大家看這段代碼的目的,是想讓讀者明白,去查看這些頭文件是很重要的。例中,本實(shí)例中用到了字符串轉(zhuǎn)換為double型雙精度數(shù)的方法,這種方法可以從stdlib.h頭文件中找到。由于該頭文件代碼較長,這里僅列出與字符串轉(zhuǎn)換為double型雙精度數(shù)相關(guān)的函數(shù)代碼,即
_CRTIMPdouble__cdeclwcstod(constwchar_t*,wchar_t**);
見圖4-6。該函數(shù)的具體用法可以從幫助中查找,幫助中一般會(huì)結(jié)合部分應(yīng)用代碼給出詳細(xì)的說明。圖4-6stdlib.h頭文件部分內(nèi)容頭文件myTrigonometry.h的內(nèi)容就是對(duì)自定義類型的聲明、對(duì)過程(或稱函數(shù))的原型聲明以及子窗口和命令欄的ID號(hào)宏定義。需要補(bǔ)充說明的部分如下:上述代碼段中的CONTROLSTRUCT自定義結(jié)構(gòu)類型的各個(gè)字段的含義為控件的標(biāo)題、控件的ID號(hào)、控件所屬的控件類、控件的顯示樣式以及控件的左上角位置及其寬度和高度。其中,控件所屬的控件類szClass是WindowsCE預(yù)定義的,例如,取BUTTON、EDIT、STATIC等,不能取系統(tǒng)沒有定義的類名,控件的ID號(hào)是在上述代碼中宏定義的,要求各整型值是互不相同的。上述代碼中,還宏定義了PI的值。主程序文件myTrigonometry.cpp增加了下面一段代碼:上面的代碼表示,如果被編譯連接成在智能手機(jī)中運(yùn)行的程序,希望該軟件只能有一個(gè)實(shí)例在運(yùn)行,這時(shí),使用FindWindow過程在內(nèi)存中查找主窗口,如果主窗口存在,說明該程序已經(jīng)在運(yùn)行了,不需要再打開它的副本運(yùn)行,只需調(diào)用SetForegroundWindow過程把程序主窗口顯示到桌面上??梢姡@段代碼的好處在于節(jié)約了內(nèi)存開銷。從本章程序開始,以后的程序?qū)嵗校鞒绦蚨技尤肓诉@段代碼。主窗口過程文件mainWndProc.cpp中需要處理五個(gè)消息,如下面的消息查找表所示:需要說明的是,收到WM_ACTIVATE消息后的處理過程體goActivateMain為如果由于運(yùn)行其他軟件使得本軟件被遮擋了,這里可以重新點(diǎn)擊應(yīng)用程序圖標(biāo)或通過任務(wù)管理器把該軟件重新激活,這時(shí)該程序主窗口就會(huì)收到WM_ACTIVATE消息,即進(jìn)入消息處理過程goActivateMain,這個(gè)過程體首先向GetDlgItem過程傳遞主窗口句柄和子窗口ID號(hào),獲得子窗口的窗口句柄,然后,調(diào)用UpdateWindow和ShowWindow過程顯示和刷新主窗口和子窗口,使得對(duì)用戶可見。子窗口過程文件sinChildWndProc.cpp需要處理五個(gè)消息,即其中,WM_CTLCOLORSTATIC和WM_CTLCOLORBTN為窗口的靜態(tài)和按鈕控件要顯示出來時(shí)引發(fā)的消息,這兩個(gè)消息的wParam為當(dāng)前設(shè)備環(huán)境,lParam為控件句柄,它們的消息處理過程均為goCtlcolorSinChildWnd,即子窗口處理WM_CREATE消息的過程goCreateSinChild調(diào)用CreateWindow過程在子窗口中創(chuàng)建八個(gè)控件,如圖4-2所示,其代碼如下:創(chuàng)建的八個(gè)控件由controlWnd結(jié)構(gòu)體數(shù)組指定,顯示樣式中需要指定WS_CHILD。由于其中放置了三個(gè)自動(dòng)單選鈕,調(diào)用CheckRadioButton過程把這三個(gè)單選鈕合為一組,并且選中其中的IDC_SINRADIO單選鈕。CheckRadioButton過程的原型為當(dāng)點(diǎn)擊子窗口中的控件時(shí),會(huì)產(chǎn)生WM_COMMAND消息,該消息的HIWORD(wParam)為控件定義的通知碼,LOWORD(wParam)為控件ID號(hào),lParam為控件窗口句柄。處理WM_COMMAND消息的過程goCommandSin
ChildWnd,首先調(diào)用過程SendDlgItemMessage獲得三個(gè)
單選鈕的狀態(tài),當(dāng)正弦鈕、余弦鈕或正切鈕被選中時(shí),nSelected依次取1、2或3。這里SendDlgItemMessage的原型為其中,hDlg為控件所在對(duì)話框窗口句柄;nIDDlgItem為接收Msg消息的控件ID號(hào);Msg為被發(fā)送的消息;wParam和lParam是Msg消息的兩個(gè)參數(shù),根據(jù)發(fā)送消息的不同,這兩個(gè)參數(shù)的意義和內(nèi)含也不一樣。例如:
i1=SendDlgItemMessage(hWnd,IDC_SINRADIO,
BM_GETCHECK,0,0);
由于IDC_SINRADIO為單選鈕,消息號(hào)BM_
GETCHECK的wParam和lParam為0,所以上述返回單選鈕的狀態(tài),是選中的還是未選中的狀態(tài),即是BST_CHECKED還是BST_UNCHECKED。再如:
SendDlgItemMessage(hWnd,IDC_EDITDATA,
WM_GETTEXT,(WPARAM)64,(LPARAM)szEdit);
由于IDC_EDITDATA為編輯控件,WM_GETTEXT消息的wParam為獲得的文本最大長度,lParam為指向文本緩沖區(qū)的指針,所以,調(diào)用上述語句將從編輯控件中取得字符串,并存放在szEdit中。又如:
SendDlgItemMessage(hWnd,IDC_EDITRESULT,
WM_SETTEXT,(WPARAM)0,(LPARAM)szOut);
這里IDC_EDITRESULT是編輯控件,WM_SETTEXT消息的wParam為空,lParam為指向要賦給控件的文本字符串,所以,上述語句是把szOut字符串賦給IDC_EDITRESULT編輯控件。
另外一種取得編輯控件文本的方法為
//另外一種獲得EDIT控件文本的方法
GetDlgItemText(hWnd,IDC_EDITDATA,szEdit,
sizeof(szEdit));其中,第一個(gè)參數(shù)為控件所在窗口,第二個(gè)參數(shù)為控件ID號(hào),第三、四個(gè)參數(shù)為存入文本的字符串?dāng)?shù)組名及其長度。同樣,調(diào)用上述語句將從編輯控件中取得字符串,并存放在szEdit中。自定義過程goCommandSinChildWnd中首次出現(xiàn)了以下語句,即
__try{}__except{}語句是典型的異常處理語句,當(dāng)程序執(zhí)行__try中的語句組時(shí)沒有出現(xiàn)錯(cuò)誤等異常,那么不會(huì)執(zhí)行_?_except語句組;如果_?_try語句組出現(xiàn)異常,則執(zhí)行__except語句組。這里在__try語句中進(jìn)行字符串向雙精度數(shù)的轉(zhuǎn)換,轉(zhuǎn)換結(jié)果放入v2中,如果轉(zhuǎn)換出錯(cuò),則執(zhí)行__except中的語句,把v2賦為0,以避免后面的語句使用未賦值的v2時(shí)出錯(cuò)。接著,程序把從編輯控件讀入的值v2轉(zhuǎn)化為弧度賦值給v1,把nSelected和v1作為實(shí)參傳遞給自定義過程calcTrig計(jì)算三角函數(shù)的值,即這里直接調(diào)用庫函數(shù)得到三角函數(shù)的值,返回值賦給res,最后,根據(jù)res的取值,進(jìn)行數(shù)值顯示處理,并把計(jì)算結(jié)果在編輯控件IDC_EDITRESULT中顯示出來。
goCommandSinChildWnd過程的最后一個(gè)語句段為其中,GetFocus()返回獲得焦點(diǎn)的控件,GetDlgCtrlID
(GetFocus())返回獲得焦點(diǎn)的控件ID號(hào),如果該ID號(hào)為IDC_EDITDATA編輯控件,則調(diào)用SipShowIM(SIPF_ON)打開軟鍵盤(即輔助輸入面板);否則,調(diào)用SipShowIM
(SIPF_OFF)關(guān)閉軟鍵盤。這個(gè)過程原型是在aygshell.h中定義的。
4.4小
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026屆北京市東城區(qū)高三上學(xué)期期末歷史試題(含答案)
- 石油工程考試題庫及答案
- 手衛(wèi)生規(guī)范考試題及答案
- 氣壓泵護(hù)理試題及答案
- 廣東省廣州市2026年九年級(jí)上學(xué)期期末物理試卷附答案
- 2026年大學(xué)大二(計(jì)算機(jī)科學(xué)與技術(shù))計(jì)算機(jī)網(wǎng)絡(luò)階段測試試題及答案
- 2026年深圳中考數(shù)學(xué)考綱解讀精練試卷(附答案可下載)
- 昆山護(hù)理招聘題庫及答案
- 2026年深圳中考?xì)v史三輪復(fù)習(xí)沖刺試卷(附答案可下載)
- 2026年深圳中考地理學(xué)困生補(bǔ)差試卷(附答案可下載)
- 2026年GRE數(shù)學(xué)部分測試及答案
- 癌癥疼痛與心理護(hù)理的綜合治療
- 浙江省寧波市鎮(zhèn)海中學(xué)2026屆高二上數(shù)學(xué)期末教學(xué)質(zhì)量檢測模擬試題含解析
- (2025年)電力交易員練習(xí)試題附答案
- 2026年咨詢工程師現(xiàn)代咨詢方法與實(shí)務(wù)模擬測試含答案
- 2026屆湖北省黃岡市重點(diǎn)名校數(shù)學(xué)高一上期末質(zhì)量檢測試題含解析
- 甘肅省酒泉市2025-2026學(xué)年高一上學(xué)期期末語文試題(解析版)
- 2026年滬教版初一歷史上冊(cè)期末考試題目及答案
- 天津市八校聯(lián)考2025屆高三上學(xué)期1月期末考試英語試卷(含答案無聽力原文及音頻)
- 2026屆遼寧省遼南協(xié)作校高一數(shù)學(xué)第一學(xué)期期末監(jiān)測試題含解析
- 2026瑞眾保險(xiǎn)全國校園招聘參考筆試題庫及答案解析
評(píng)論
0/150
提交評(píng)論