版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第15單元控件本單元教學(xué)目標(biāo) 介紹各種常用控件的使用方法及基于對(duì)話框的應(yīng)用程序。學(xué)習(xí)要求?掌握常用控件的使用方法以及基于對(duì)話框的應(yīng)用程序開(kāi)發(fā)。授課內(nèi)容?對(duì)話框與控件是密不行分的。Windows供應(yīng)了一批基本控件,如靜態(tài)控件(StaticText)、編輯控件(EditBox)、組框、等,可解決大部分用戶輸入界面設(shè)計(jì)的需求。另外,使用VisualC++編程還可使用一批通用控件,包括動(dòng)畫(huà)控件(Animate)、標(biāo)題控件(Header)、復(fù)合文本編輯控件(RichEdit)、標(biāo)簽控件(Tab)和樹(shù)狀列表控件(Tree(cuò)List)等,可大大提高應(yīng)用程序界面的表現(xiàn)力。15.1常用控件控件(Control)是Windows供應(yīng)的獨(dú)立小部件,在對(duì)話框與用戶的交互過(guò)程擔(dān)當(dāng)主要角色,如顯示文本、圖片和圖標(biāo)、命令按鈕、編輯文字或數(shù)據(jù)和滾動(dòng)條等??丶耐庥^和功能是由其屬性(Property)決定的.在編輯對(duì)話框模板資源時(shí),對(duì)準(zhǔn)某個(gè)控件按下鼠標(biāo)右鍵可調(diào)出其屬性設(shè)置對(duì)話框。不同的控件屬性也不完全相同。屬性對(duì)話框中有若干選項(xiàng)卡,如General選項(xiàng)卡、Styles選項(xiàng)卡和ExtendStyles選項(xiàng)卡等,控件的屬性就分布在各選項(xiàng)卡上(參看14。7:“對(duì)話框模板資源的編輯”)??丶此坪?jiǎn)潔,但實(shí)際上也是一個(gè)窗口,對(duì)應(yīng)一個(gè)CWnd派生類的對(duì)象.例如,編輯控件對(duì)應(yīng)Cedit類的對(duì)象,靜態(tài)文本控件對(duì)應(yīng)CStatic類的對(duì)象.每個(gè)控件均有自己的標(biāo)識(shí)符,在程序中可使用對(duì)話框類的成員函數(shù)GetDlgItem()取得指向簡(jiǎn)略控件對(duì)象的指針,然后對(duì)其進(jìn)行編程。本節(jié)介紹幾個(gè)常用的控件的使用方法。1.靜態(tài)文本(StaticText)控件:用于顯示字符串,不接受輸入信息。多用于顯示其他控件的標(biāo)題。使用靜態(tài)文本控件一般均可使用缺省屬性。2.圖片(Picture)控件,用于顯示位圖、圖標(biāo)、方框等,不接受輸入信息。在圖片控件的屬性中,最重要的是其Type(在控件屬性對(duì)話框的General選項(xiàng)卡中設(shè)置),可選類型有Frame(矩形框)、Rectangle(矩形塊)、Icon(圖標(biāo))和Bitmap(位圖)等。如果類型選擇Frame和Rectangle,可通過(guò)Color選項(xiàng)選擇其顏色;如果選擇Icon和Bitmap,可通過(guò)Image選項(xiàng)選擇相應(yīng)的資源.3.組框(GroupBox)控件:顯示一個(gè)文本字符串和一個(gè)方框,通常用于組合一組相關(guān)控件。以上三個(gè)控件均對(duì)應(yīng)CStatic類型的對(duì)象。應(yīng)該說(shuō)明的是,如果無(wú)需對(duì)靜態(tài)控件編程,則也不要求其標(biāo)識(shí)符唯一,通常可選用對(duì)話框模板編輯器自動(dòng)供應(yīng)的缺省標(biāo)識(shí)符(IDC_STATIC)。4.編輯(EditBox)控件。編輯控件是最常用的控件,可用于單行或多行文本編輯,其功能十分強(qiáng)大,相當(dāng)于一個(gè)小型文本編輯器。編輯控件亦可用來(lái)輸入數(shù)值數(shù)據(jù)和日期、時(shí)間數(shù)據(jù)。主要屬性有AlignText(文本對(duì)齊方式)、Multiline(多行編輯)、AutoHScroll(輸入到窗口右邊界后自動(dòng)橫滾)等(均在控件屬性對(duì)話框的Styles選項(xiàng)卡中設(shè)置).編輯控件對(duì)應(yīng)CEdit類的對(duì)象。5.按鈕(Button)控件,用于響應(yīng)用戶的鼠標(biāo)按鍵等操作,觸發(fā)相應(yīng)的大事。編程時(shí)按鈕的處理與菜單選項(xiàng)類似,可為其添加命令響應(yīng)函數(shù)(通常借助ClassWizard完成)。6.檢查框(CheckBox)控件,用作選擇標(biāo)記,有選中、不選中和不確定等狀態(tài)。7.單選按鈕(RadioButton)控件,用來(lái)作多項(xiàng)選擇。單選按鈕總是成組使用的。在一組單選按鈕中,第一個(gè)按鈕最為重要,其ID可用于在對(duì)話框類中建立對(duì)應(yīng)的數(shù)據(jù)成員(肯定要設(shè)置其Group屬性為選中)。按鈕、檢查框和單選按鈕三種控件均對(duì)應(yīng)CButton類的對(duì)象。8.列表框(ListBox)控件,顯示一個(gè)文字列表,用戶可從表中選擇一項(xiàng)或多項(xiàng)。主要屬性為Selection(位于Styles選項(xiàng)卡中)。可選擇“Single"(單選)、“Multiple"(多選)等。屬性Sort表示是否將列表框的內(nèi)容排序.列表框中的文字列表需在編程時(shí)確定,通常是在對(duì)話框類的InitDialog()成員函數(shù)中給出。列表框控件對(duì)應(yīng)CListBox類對(duì)象。9.組合框(ComboBox)是編輯控件和列表框的組合,可分為簡(jiǎn)易式(Simple)、下拉式(Dropdown)和下拉列表式(DropList)。組合框中列表的內(nèi)容可在設(shè)置時(shí)用Data選項(xiàng)卡輸入。注意輸入各列表項(xiàng)時(shí)要使用Ctrl+Enter開(kāi)頭新的一項(xiàng)。組合框控件對(duì)應(yīng)CCombo類的對(duì)象.為了在程序中對(duì)控件進(jìn)行查詢和掌握,可以利用CWnd類供應(yīng)的一組管理對(duì)話框控件的成員函數(shù).這類函數(shù)很多,以下僅舉幾例:對(duì)話框控件管理函數(shù)??說(shuō)明GetCheckedRadioButton() 返回指定單選按鈕組中被選擇的單選按鈕的ID;GetDlgItem()???返回一個(gè)指向一給定控件的指針;GetDlgItemText()? 獲得在一個(gè)控件內(nèi)顯示的正文;SetDlgItemText()??設(shè)置一個(gè)控件顯示的正文。[例15—1]為某公司設(shè)計(jì)一個(gè)人事管理系統(tǒng),其基本功能為輸入、編輯、查看和保存公司的人事檔案.職工人事檔案包括姓名、性別、誕生日期、婚姻狀況、所在部門(mén)、職務(wù)和工資。說(shuō)明:為了管理和保存檔案,選用SDI(單文檔/視圖界面)程序結(jié)構(gòu).首先用AppWizard生成一個(gè)名為EMP的SDI程序框架,在第4步中時(shí)按下“Advanced…”按鈕調(diào)出AdvancedOptions對(duì)話框,在DocumentTemplateStrings選項(xiàng)卡中將Fileextension(文件名后綴)項(xiàng)設(shè)置為“dat”,在WindowStyles選項(xiàng)卡中設(shè)置Maximized檢查框?yàn)椤斑x中”狀態(tài)。其他選項(xiàng)均可用缺省設(shè)置。使用DeveloperStudio菜單的Insert/Resource…選項(xiàng)調(diào)出InsertSource對(duì)話框,為項(xiàng)目添加一個(gè)對(duì)話框模板資源,并將其標(biāo)識(shí)符改為IDD_EMPLOYEE。適當(dāng)調(diào)整其大小,并在其上添加如下控件,使其看上去與圖15-1類似.靜態(tài)文本控件:姓名、誕生日期、部門(mén)、職務(wù)、工資;圖片控件:類型為Icon,使用項(xiàng)目自帶的IDR_MAINFRAME圖標(biāo),也可自己為項(xiàng)目添加一個(gè)圖標(biāo)資源并編輯成自己喜愛(ài)的樣式;編輯控件三個(gè),其ID分別改為IDC_NAME、IDC_BIRTHDATE和IDC_SALARY;單選按鈕兩個(gè),其ID和Caption分別改為IDC_MALE,“男”和IDC_FEMALE,“女"。為IDC_MALE設(shè)置屬性Group;檢查框一個(gè),其ID和Caption分別改為IDC_M(jìn)ARRIED和“婚否”;列表框一個(gè),其ID改為IDC_DEPT,保證Styles選項(xiàng)卡中的Selection項(xiàng)為Single,并將Sort檢查框設(shè)置為非選中狀態(tài);組合框一個(gè),其ID改為IDC_POSITION,并在Style選項(xiàng)卡中將Type設(shè)置為DropList,并將Sort檢查框設(shè)置為非選中狀態(tài)。然后在Data選項(xiàng)卡中輸入各種職務(wù)的名稱: 總經(jīng)理?副總經(jīng)理?部門(mén)經(jīng)理?項(xiàng)目經(jīng)理?業(yè)務(wù)經(jīng)理注意使用Ctrl+Enter鍵回車換行。?組框一個(gè),將其Caption改為“個(gè)人資料”,調(diào)整其大小和位置,使之可以框住姓名、性別、誕生日期和婚姻狀況等控件。圖15-1人事檔案管理系統(tǒng)的輸入、編輯對(duì)話框?然后為各控件設(shè)置TabOrder。所謂TabOrder,是指在對(duì)話框中用Tab鍵選擇控件的挨次。使用Tab鍵選擇控件在鼠標(biāo)發(fā)生故障,或大量鍵盤(pán)輸入時(shí)格外有用.選擇DeveloperStudio菜單的Layout/TabOrder選項(xiàng),然后按最便利的挨次用鼠標(biāo)逐一點(diǎn)擊對(duì)話框模板上的各控件即可。圖15-1人事檔案管理系統(tǒng)的輸入、編輯對(duì)話框設(shè)計(jì)好對(duì)話框模板后,利用ClassWizard自動(dòng)建立對(duì)話框類。用Ctrl+W鍵可直接調(diào)出ClassWizard,也可以通過(guò)DeveloperStudio菜單的View/ClassWizard…選項(xiàng)調(diào)出。進(jìn)入ClassWizard后,它會(huì)發(fā)現(xiàn)已建立的對(duì)話框模板資源,并彈出一個(gè)對(duì)話框詢問(wèn)是否要為該對(duì)話框模板建立類。按下“OK”按鈕,會(huì)彈出NewClass對(duì)話框,填寫(xiě)類名(CEmpDlg)后按“OK”按鈕即可為對(duì)話框建立一個(gè)類。利用ClassWizard為對(duì)話框類添加與各控件對(duì)應(yīng)的數(shù)據(jù)成員。選擇MemberVariables選項(xiàng)卡,確保ClassName項(xiàng)為新的對(duì)話框類,然后在選項(xiàng)卡下方的窗口中選擇各控件的ID并按下“AddVariable…”按鈕為其添加對(duì)應(yīng)成員變量:?ControlIDs?? VariableType? Membervariablename IDC_BIRTHDATE? COleDat(yī)eTime m_tBirthdat(yī)e?IDC_DEPT ?CString ? m_strDept?IDC_MALE? ?int????m_nSex?IDC_MARRIED??BOOL???m_bMarried?IDC_NAME???CString? ?m_strName?IDC_POSITION ?CString???m_strPosition?IDC_SALARY??float?? m_fSalary注意在添加成員變量對(duì)話框中的Category項(xiàng)均選擇Value(值)并在Variabletype組合框中選擇相應(yīng)的數(shù)據(jù)類型。注意編輯控件IDC_BIRTHDATE對(duì)應(yīng)了一個(gè)COleDat(yī)eTime類的數(shù)據(jù)成員.COleDateTime類是用于表示一個(gè)時(shí)間時(shí)間,包括日期和時(shí)刻。ColeDateTime類的成員函數(shù)很多,主要有:COleDateTime(intnYear,intnMonth,intnDay,intnHour,intnMin,intnSec);? ????? ??//依據(jù)給定值構(gòu)造時(shí)間對(duì)象staticCOleDateTimeGetCurrentTime();??//用當(dāng)前系統(tǒng)時(shí)間填寫(xiě)對(duì)象intGetYear()const; ?? ?//取對(duì)象中的年值intGetMonth()const; ? ??//取對(duì)象中的月值intGetDay()const; ??? ?//取對(duì)象中的日值intGetHour()const;?? ? ?//取對(duì)象中的小時(shí)值intGetMinute()const;??????//取對(duì)象中的分鐘值intGetSecond()const;??????//取對(duì)象中的秒值intGetDayOfWeek()const;?? ??//取對(duì)象中的星球值intGetDayOfYear()const;? ?//取日相對(duì)上年末的天數(shù)intSetDat(yī)eTime(intnYear,intnMonth,intnDay,intnHour,intnMin,intnSec);?? ??????//用給定值填寫(xiě)對(duì)象intSetDate(intnYear,intnMonth,intnDay);?//用給定日期填寫(xiě)對(duì)象intSetTime(intnHour,intnMin,intnSec);? //用給定時(shí)間填寫(xiě)對(duì)象CStringFormat(LPCTSTRlpszFormat)const;?//將對(duì)象值按指定格式寫(xiě)入字符串其中大部分的含義很明顯,也可通過(guò)查詢MSDN明確其用法。下面介紹最后一個(gè)函數(shù),即將COleDateTime對(duì)象的值寫(xiě)入字符串函數(shù)的用法。該函數(shù)的參數(shù)lpszFormat是輸出格式字符串,其中除了一般的字符信息外,還可加入形如“%A”的格式說(shuō)明。常用的格式說(shuō)明有:格式說(shuō)明 ?說(shuō)明%a 星期幾的縮寫(xiě)%A???星期幾的全稱%b ??月份名的縮寫(xiě)%B???月份名的全稱%c?? 日期和時(shí)間的習(xí)慣表示%d???日期(01–31)%H ??24時(shí)制的小時(shí)(00–23)%I???12時(shí)制的小時(shí)(01–12)%j???當(dāng)前日期與上年年底之間的天數(shù)(001–366)%m ?數(shù)字表示的月份(01–12)%M 分鐘(00–59)%p ??12時(shí)制的時(shí)間(帶A。M./P。M.表示)%S???秒(00–59)%U???一年中的第幾個(gè)星期(00–53)%w???星期幾(0–6;星期日為0)%W ??一年中的第幾個(gè)星期,以星期一作為星期的開(kāi)頭(00–53)%x? 日期%X?? 時(shí)間%y???年份(00–99)%Y ??年份(全4位)%z,%Z 時(shí)區(qū)名或其簡(jiǎn)稱%%???百分號(hào)例如:?ColeTateTime?tm(2000,3,16,10,30,0);? Cstrings;s=tm。Format(“%Y。%m.%d(%A),%H:%M:%S”);則字符串s中的內(nèi)容為“2000.03。16(Thursday),10:30:00”。?使用COleDat(yī)eTime類要在頭文件中添加文件包含命令:#include<afxdisp.h>如果添加的是對(duì)應(yīng)編輯控件的成員變量,可在選項(xiàng)卡左下方輸入數(shù)據(jù)檢驗(yàn)信息。對(duì)于字符串變量,可輸入最大字符個(gè)數(shù);對(duì)于日期和數(shù)值變量,可分別輸入上限值和下限值.?以上工作完成后,可檢查一下由ClassWizard生成的CEmpDlg類的代碼。CEmpDlg類的定義為:classCEmpDlg:publicCDialog{public:?CEmpDlg(CWnd*pParent=NULL);//standardconstructor//DialogData//{{AFX_DATA(CEmpDlg)?enum{IDD=IDD_EMPLOYEE};?ColeDateTime??m_tBirthdate;?CString???m_strDept;?BOOL? ??m_bMarried; float ?m_fSalary;?Cstring? m_strName;?int????m_nSex;?CString???m_strPosition;?//}}AFX_DATA//Overrides?//ClassWizardgenerat(yī)edvirtualfunctionoverrides?//{{AFX_VIRTUAL(CEmpDlg) protected:?virtualvoidDoDat(yī)aExchange(CDat(yī)aExchange*pDX);//DDX/DDVsupport?//}}AFX_VIRTUAL//Implementationprotected:?//Generat(yī)edmessagemapfunctions?//{{AFX_MSG(CEmpDlg)?virtualBOOLOnI(lǐng)nitDialog();?//}}AFX_MSG?DECLARE_MESSAGE_M(jìn)AP()};對(duì)話框類的構(gòu)造函數(shù)和DoDat(yī)aExchange()成員函數(shù)也是由ClassWizard自動(dòng)維護(hù)的:CEmpDlg::CEmpDlg(CWnd*pParent/*=NULL*/) :CDialog(CEmpDlg::IDD,pParent){??//{{AFX_DATA_INIT(CEmpDlg)?m_tBirthdate=COleDateTime::GetCurrentTime(); ?m_strDept=_T(”");?m_bMarried=FALSE;? m_fSalary=0.0f;?m_strName=_T("”);??m_nSex=-1;?m_strPosition=_T(""); ?//}}AFX_DATA_INIT}voidCEmpDlg::DoDataExchange(CDataExchange*pDX){ ?CDialog::DoDataExchange(pDX);?//{{AFX_DATA_MAP(CEmpDlg)??DDX_Text(pDX,IDC_BIRTHDATE,m_tBirthdat(yī)e);?DDX_LBString(pDX,IDC_DEPT,m_strDept);??DDX_Check(pDX,IDC_M(jìn)ARRIED,m_bMarried);?DDX_Text(pDX,IDC_SALARY,m_fSalary);??DDV_M(jìn)inMaxFloat(pDX,m_fSalary,0.f,10000.f); DDX_Text(pDX,IDC_NAME,m_strName);??DDV_MaxChars(pDX,m_strName,20);?DDX_Radio(pDX,IDC_MALE,m_nSex); ?DDX_CBString(pDX,IDC_POSITION,m_strPosition);?DDV_M(jìn)axChars(pDX,m_strPosition,20);??//}}AFX_DATA_MAP}其中構(gòu)造函數(shù)中有CEmpDlg類各數(shù)據(jù)成員的初始化代碼,DoDataExchange()函數(shù)中為這些數(shù)據(jù)成員與控件之間的數(shù)據(jù)交換和數(shù)據(jù)檢驗(yàn)代碼。?接著,還應(yīng)編輯項(xiàng)目的菜單資源,在框架窗口的主菜單(IDR_M(jìn)AINFRAME)中添加兩個(gè)菜單選項(xiàng),并為下拉菜單“編輯”添加三個(gè)菜單選項(xiàng): ID???Caption????Prompt? ID_NEXT 下一記錄? ??下一職工檔案\n下一記錄ID_PREV?上一記錄??? 上一職工檔案\n上一記錄"ID_APPEND 輸入(&I)\tCtrl+I(xiàn)?輸入新職工檔案\n輸入??ID_EDIT? 編輯(&E)\tCtrl+E?編輯職工檔案\n編輯??ID_DELETE 刪除(&D)\tCtrl+D?刪除職工檔案\n刪除然后利用ClassWizard為視圖類添加與這些菜單選項(xiàng)對(duì)應(yīng)的成員函數(shù)。進(jìn)入在ClassWizard的MessageMaps選項(xiàng)卡,選擇ClassName項(xiàng)為CMyView,在ObjectIDs列表框中分別選擇新添加的菜單選項(xiàng)的ID,在Messages列表框中選擇COMMAND,按下AddFunction按鈕添加成員函數(shù)。ClassWizard會(huì)為這些菜單選項(xiàng)添加相應(yīng)的消息響應(yīng)函數(shù)(目前尚沒(méi)有簡(jiǎn)略內(nèi)容,需要程序員自行加入有關(guān)的處理代碼),并將其聲明加入CMyView類定義,在消息映射宏中加入相應(yīng)的消息映射。?完成以上工作后,即可修改程序框架,添加必要的代碼。?程序:由于列表框尚未初始化,所以為CEmpDlg類重載OnInitDialog()成員函數(shù)(可使用ClassWizard完成),并添加相應(yīng)代碼:BOOLCEmpDlg::OnInitDialog(){?CListBox*pLB=(CListBox*)GetDlgItem(IDC_DEPT); pLB->InsertString(-1,"辦公室”);?pLB-〉InsertString(—1,”開(kāi)發(fā)部"); pLB->InsertString(-1,"生產(chǎn)部”);?pLB->InsertString(-1,”銷售部”);?pLB->InsertString(-1,”人事部");?returnCDialog::OnInitDialog();}其中GetDlgItem()為對(duì)話框類的成員函數(shù),用于取對(duì)話框控件的指針.?為項(xiàng)目添加有關(guān)自定義的職工類CEmployee(cuò).選擇DeveloperStudio菜單的Insert/NewClass…選項(xiàng),調(diào)出NewClass對(duì)話框。在ClassType組合框中選擇Generic(一般類),填寫(xiě)類名CEmployee(cuò),在對(duì)話框下方的Baseclass(es)框中輸入基類CObject。 在Workspace窗口的ClassView中選擇生成的CEmployee類的定義,添加代碼:classCEmployee:publicCObject{?DECLARE_SERIAL(CEmployee)public:?CString? ?m_strName;??//姓名?int?? ?m_nSex;???//性別?COleDateTime??m_tBirthdate;?//誕生日期?BOOL????m_bMarried; //婚否 CString? m_strDept;? //工作部門(mén)?CString?? m_strPosition; //職務(wù)?float? ?m_fSalary;??//工資?CEmployee(cuò)(){}?CEmployee(cuò)&operator=(CEmployee&e); virtual~CEmployee(cuò)();?virtualvoidSerialize(CArchive&ar);};CEmployee類的對(duì)象即為一個(gè)職工的檔案,我們用序列化實(shí)現(xiàn)文檔的存取,所以要為CEmployee類編寫(xiě)序列化代碼。這包括DECLARE_SERIAL()宏和IMPLEMENT_SERIAL()宏(在CEmployee類的源代碼文件中),一個(gè)沒(méi)有參數(shù)的構(gòu)造函數(shù),重載的賦值運(yùn)算符和Serialize()成員函數(shù)。在CEmployee類的源代碼文件中添加以下代碼:IMPLEMENT_SERIAL(CEmployee,CObject,1)//重載的賦值運(yùn)算符CEmployee(cuò)&CEmployee::operator=(CEmployee(cuò)&e){ m_strName??=e.m_strName;?m_nSex???=e。m_nSex;?m_tBirthdate??=e。m_tBirthdate;?m_bMarried? =e。m_bMarried;?m_strDept??=e。m_strDept;?m_strPosition?=e.m_strPosition;?m_fSalary ?=e。m_fSalary;?return*this;}//序列化函數(shù)voidCEmployee::Serialize(CArchive&ar){?CObject::Serialize(ar);?if(ar。IsStoring())?{??ar〈<m_strName;??ar<<m_nSex; ?ar<〈m_tBirthdat(yī)e; ?ar<<m_bMarried;? ar〈<m_strDept;??ar<<m_strPosition;? ar<〈m_fSalary;?}?else?{??ar>〉m_strName;??ar>>m_nSex;??ar〉>m_tBirthdat(yī)e;? ar〉>m_bMarried;??ar>>m_strDept;??ar〉>m_strPosition;??ar>>m_fSalary;?}} 然后修改文檔類CMyDocument類定義,添加一個(gè)CEmployee類的數(shù)組:??#include”employee。h"#defineMAX_EMPLOYEE 1000classCMy1501Doc:publicCDocument{?DECLARE_(tái)DYNCREATE(CMy1501Doc)public:?CEmployeem_empList[MAX_EMPLOYEE];?intm_nCount; public:???virtualBOOLOnNewDocument();?virtualvoidSerialize(CArchive&ar);?virtualvoidDeleteContents(); DECLARE_M(jìn)ESSAGE_M(jìn)AP()};為了節(jié)省篇幅,這段程序經(jīng)過(guò)刪節(jié),與原來(lái)由AppWizard生成的程序有所不同。其中黑體部分為要添加的代碼。注意重載成員函數(shù)DeleteContents()可以手工進(jìn)行,也可以通過(guò)ClassWizard進(jìn)行。Serialize()和DeleteContents()兩個(gè)成員函數(shù)的代碼如下:voidCMy1501Doc::Serialize(CArchive&ar){? if(ar.IsStoring())???ar〈<m_nCount;?else???ar〉>m_nCount;?for(inti=0;i〈m_nCount;i++)? m_empList[i]。Serialize(ar);}voidCMy1501Doc::DeleteContents(){?m_nCount=0; //在打開(kāi)文件和建立新文件時(shí)將數(shù)組大小置0?CDocument::DeleteContents();}?即在文檔類的Serialize()函數(shù)中,數(shù)據(jù)的序列化工作是通過(guò)調(diào)用Cemployee類的Serialize()函數(shù)實(shí)現(xiàn)的。?實(shí)際上,要為本程序添加的大部分代碼均在視圖類中.首先在視圖類CmyView類的定義中添加一個(gè)用于記錄當(dāng)前操作的是哪個(gè)記錄的數(shù)據(jù)成員:??int?m_nCurrEmp;并為視圖類重載OnInitialUpdate()成員函數(shù),在其中初始化該變量:? voidCMy1501View::OnInitialUpdate(){ CView::OnI(lǐng)nitialUpdate(); m_nCurrEmp=0; Invalidate();} 視圖類的OnDraw()成員函數(shù)用于顯示正在操作的職工檔案:voidCMy1501View::OnDraw(CDC*pDC){?CMy1501Doc*pDoc=GetDocument();?ASSERT_VALID(pDoc);?//顯示職工人數(shù)和當(dāng)前職工編號(hào)?CStrings;?s.Format("職工人數(shù):%d”,pDoc->m_nCount);?pDC—>SetTextColor(RGB(255,0,0));?pDC—>TextOut(40,40,s);?s.Format("職工編號(hào):%d”,m_nCurrEmp+1);?pDC—>TextOut(340,40,s);?pDC—>MoveTo(40,70);?pDC—〉LineTo(600,70);?//如果檔案非空,顯示當(dāng)前記錄?if(pDoc->m_nCount>0)?{????//顯示欄目名稱 ?pDC—〉SetTextColor(RGB(0,0,0));?? ?pDC-〉TextOut(140,90,"姓名:");??pDC->TextOut(140,130,"性別:"); ? ?pDC-〉TextOut(140,170,"誕生日期:”);??pDC->TextOut(140,210,"婚姻狀態(tài):");?? pDC—>TextOut(140,250,"部門(mén):");??pDC—>TextOut(140,290,”職務(wù):”);????pDC—〉TextOut(140,330,”工資:");??//顯示欄目?jī)?nèi)容????pDC-〉SetTextColor(RGB(0,0,255));??pDC—>TextOut(300,90,pDoc—>m_empList[m_nCurrEmp]。m_strName); ???if(pDoc—〉m_empList[m_nCurrEmp].m_nSex==0)???pDC->TextOut(300,130,"男"); ?? else?? pDC->TextOut(300,130,"女"); ??s=pDoc->m_empList[m_nCurrEmp].m_tBirthdate。Format("%Y。%m.%d");??pDC-〉TextOut(300,170,s); ?if(pDoc-〉m_empList[m_nCurrEmp].m_bMarried)???pDC—〉TextOut(300,210,"已婚");?? ?else???pDC->TextOut(300,210,”未婚");????pDC-〉TextOut(300,250,pDoc-〉m_empList[m_nCurrEmp]。m_strDept);?pDC—>TextOut(300,290,pDoc—〉m_empList[m_nCurrEmp].m_strPosition);????s.Format("%8.2f",pDoc->m_empList[m_nCurrEmp]。m_fSalary);? pDC->TextOut(300,330,s);?}}?在編輯資源時(shí),我們框架窗口添加了5個(gè)菜單選項(xiàng),并將對(duì)應(yīng)的消息響應(yīng)函數(shù)映射到了視圖類中。這些消息響應(yīng)函數(shù)的代碼如下:voidCMy1501View::OnAppend(){ CMy1501Doc*pDoc=GetDocument();?ASSERT_VALID(pDoc);?CEmpDlgdlg;?if(dlg.DoModal()==IDOK) {? ? pDoc-〉m_nCount++;? m_nCurrEmp=pDoc—>m_nCount—1;? ??pDoc—>m_empList[m_nCurrEmp]。m_strName =dlg.m_strName;??pDoc-〉m_empList[m_nCurrEmp]。m_nSex? =dlg.m_nSex;??? pDoc->m_empList[m_nCurrEmp]。m_tBirthdate=dlg.m_tBirthdat(yī)e;??pDoc-〉m_empList[m_nCurrEmp].m_bMarried =dlg.m_bMarried; ?? pDoc->m_empList[m_nCurrEmp]。m_strDept =dlg.m_strDept;? pDoc-〉m_empList[m_nCurrEmp].m_strPosition=dlg.m_strPosition;?? ?pDoc-〉m_empList[m_nCurrEmp].m_fSalary?=dlg.m_fSalary;? pDoc->SetModifiedFlag(); ? ?Invalidate();?}}//刪除當(dāng)前記錄voidCMy1501View::OnDelete(){?CMy1501Doc*pDoc=GetDocument(); ASSERT_VALID(pDoc); if(pDoc->m_nCount)?{????for(inti=m_nCurrEmp;i〈pDoc—〉m_nCount—1;i++) pDoc->m_empList[i]=pDoc->m_empList[i+1];?? ?pDoc->m_nCount-—;? if(m_nCurrEmp>pDoc-〉m_nCount-1)???? m_nCurrEmp=pDoc->m_nCount-1; ?pDoc->SetModifiedFlag(); ? ?Invalidate();?}}//編輯當(dāng)前記錄voidCMy1501View::OnEdit(){ CMy1501Doc*pDoc=GetDocument();?ASSERT_VALID(pDoc); if(pDoc-〉m_nCount) {? ??CEmpDlgdlg;??dlg。m_strName=pDoc->m_empList[m_nCurrEmp]。m_strName; ?dlg。m_nSex?=pDoc—>m_empList[m_nCurrEmp].m_nSex;??dlg。m_tBirthdate=pDoc-〉m_empList[m_nCurrEmp].m_tBirthdate;??dlg.m_bMarried=pDoc—〉m_empList[m_nCurrEmp]。m_bMarried;??? dlg.m_strDept=pDoc-〉m_empList[m_nCurrEmp]。m_strDept; ?dlg.m_strPosition=pDoc->m_empList[m_nCurrEmp].m_strPosition;????dlg.m_fSalary=pDoc—〉m_empList[m_nCurrEmp].m_fSalary; ?if(dlg.DoModal()==IDOK) ???{?? pDoc->m_empList[m_nCurrEmp]。m_strName=dlg.m_strName;?? ?pDoc—〉m_empList[m_nCurrEmp].m_nSex =dlg.m_nSex;pDoc->m_empList[m_nCurrEmp].m_tBirthdate=dlg。m_tBirthdate;? ?? pDoc-〉m_empList[m_nCurrEmp].m_bMarried?=dlg.m_bMarried; ? pDoc—>m_empList[m_nCurrEmp]。m_strDept?=dlg.m_strDept;???pDoc-〉m_empList[m_nCurrEmp].m_strPosition?=dlg。m_strPosition;? ?pDoc-〉m_empList[m_nCurrEmp].m_fSalary?=dlg。m_fSalary;? ? ?pDoc—>SetModifiedFlag(); ??Invalidate(); ?}?}}//查看后一記錄voidCMy1501View::OnNext(){?CMy1501Doc*pDoc=GetDocument();?ASSERT_VALID(pDoc);?if(pDoc->m_nCount>1)?{????if(m_nCurrEmp==pDoc-〉m_nCount—1)???m_nCurrEmp=0; ??else?? m_nCurrEmp++;?}?Invalidate();}//查看前一記錄voidCMy1501View::OnPrev(){?CMy1501Doc*pDoc=GetDocument();?ASSERT_VALID(pDoc);?if(pDoc->m_nCount〉1)?{ ? ?if(m_nCurrEmp==0)???m_nCurrEmp=pDoc—〉m_nCount—1;? ??else???m_nCurrEmp--;?}?Invalidat(yī)e();} 輸入輸出:用戶可選擇框架窗口的菜單“編輯”中的選項(xiàng)“輸入"和“編輯”調(diào)出檔案編輯對(duì)話框輸入一個(gè)職工檔案或編輯當(dāng)前職工檔案。用“刪除”選項(xiàng)可刪除當(dāng)前職工檔案。當(dāng)前職工檔案顯示在框架窗口的客戶區(qū),可用菜單選項(xiàng)“上一記錄”和“下一記錄"轉(zhuǎn)變當(dāng)前職工檔案.可通過(guò)“文件"菜單對(duì)職工檔案文件進(jìn)行存取.?分析:部門(mén)列表框控件的列表內(nèi)容應(yīng)在程序中給出。在CEmpDlg類的成員函數(shù)OnInitDialog()中聲明一個(gè)指向CListBox類的指針,然后用對(duì)話框類的成員函數(shù)GetDlgItem()將其與對(duì)話框模板中的列表框控件IDC_DEPT聯(lián)系起來(lái),并使用CListBox類的成員函數(shù)InsertString()為列表框添加列表內(nèi)容。 在視圖類中有一個(gè)數(shù)據(jù)成員m_nCurrEmp,用于指示當(dāng)前職工檔案。實(shí)際上,“上一記錄”和“下一記錄”等命令消息響應(yīng)函數(shù)就是通過(guò)對(duì)這個(gè)變量的操作來(lái)實(shí)現(xiàn)的.?插入的新記錄放在數(shù)組的最后面。?插入新記錄和編輯當(dāng)前記錄均通過(guò)一個(gè)CEmpDlg類的對(duì)象實(shí)現(xiàn)。在編輯當(dāng)前記錄前,要將當(dāng)前職工檔案的有關(guān)內(nèi)容復(fù)制到對(duì)話框?qū)ο蟮挠嘘P(guān)數(shù)據(jù)成員中。?刪除當(dāng)前記錄是通過(guò)將當(dāng)前記錄后面的全部記錄均向前移一個(gè)實(shí)現(xiàn)的。14.2基于對(duì)話框的應(yīng)用程序?對(duì)話框不僅可以作為應(yīng)用程序中的一個(gè)部件,而且還可以建立以對(duì)話框?yàn)橹鹘缑娲翱诘膽?yīng)用程序,稱為基于對(duì)話框的應(yīng)用程序?;趯?duì)話框的應(yīng)用程序結(jié)構(gòu)適合于比較簡(jiǎn)潔的應(yīng)用,例如Windows供應(yīng)的CharacterMap(字符映射表),Calculator(計(jì)算器)和PhoneDialer(電話撥號(hào)程序)等有用程序?;趯?duì)話框的應(yīng)用程序的結(jié)構(gòu)與基于框架窗口的應(yīng)用程序結(jié)構(gòu)類似,只是使用CDialog派生類對(duì)象代替了CFrameWnd派生類對(duì)象作為主窗口。由于CDialog也是CWnd派生類,所以也繼承了CWnd類的全部成員函數(shù).不同的是,窗口的大小可以在運(yùn)行時(shí)動(dòng)態(tài)調(diào)整,客戶區(qū)為白色,有邊框;而對(duì)話框的大小固定,無(wú)明顯的客戶區(qū)邊框(除標(biāo)題欄外的全部灰色部分均為客戶區(qū))。在基于對(duì)話框的應(yīng)用程序中,除了可以使用各種控件外,還可響應(yīng)鼠標(biāo)或鍵盤(pán)消息,使用OnPaint()函數(shù)在對(duì)話框中進(jìn)行繪圖或輸出文字信息。?基于對(duì)話框的應(yīng)用程序框架可使用AppWizard建立。[例15-2]用基于對(duì)話框的應(yīng)用程序結(jié)構(gòu)實(shí)現(xiàn)例14-5的彩色吹泡泡程序。由于對(duì)話框本身結(jié)構(gòu)簡(jiǎn)潔,沒(méi)有明顯的客戶區(qū),顏色也不醒目,所以我們?cè)趯?duì)話框上自行建立一個(gè)矩形區(qū)域作為吹泡泡的客戶區(qū),并通過(guò)一個(gè)“顏色設(shè)置”按鈕來(lái)設(shè)置泡泡的顏色。說(shuō)明:用AppWizard建立一個(gè)基于對(duì)話框的應(yīng)用程序框架(參看15.4:“用AppWizard生成基于對(duì)話框的應(yīng)用程序”),全部設(shè)置均使用缺省值.?使用對(duì)話框模板編輯器編輯作為主界面窗口的對(duì)話框模板,將其上的靜態(tài)文本控件和“Cancel”按鈕刪除,將“OK”按鈕的Caption設(shè)置為“完成",并將對(duì)話框大小調(diào)整為400×300左右。?為對(duì)話框模板添加一個(gè)Picture控件,將其Type設(shè)置為Frame,Color設(shè)置為Black,并設(shè)置Sunken屬性(在Styles選項(xiàng)卡中)。調(diào)整其位置為(7,7),大小為287×287.這個(gè)框中即為自定義的吹泡泡客戶區(qū),全部的吹泡泡活動(dòng)均在該區(qū)域中進(jìn)行。?為對(duì)話框模板添加一個(gè)按鈕,將其ID改為IDC_COLO(píng)R,Caption改為“顏色設(shè)置”。?使用ClassWizard為對(duì)話框類添加一個(gè)鼠標(biāo)左鍵消息響應(yīng)函數(shù)OnLButtonDown()和一個(gè)按鈕命令消息響應(yīng)函數(shù)OnColor().?程序:在對(duì)話框類的頭文件前面添加一行:#defineMAX_BUBBLE??250并在對(duì)話框類定義中添加存放泡泡的幾何參數(shù)和顏色的數(shù)組數(shù)據(jù)成員: CRect??m_rectBubble[MAX_BUBBLE]; COLORREF??m_colorBubble[MAX_BUBBLE];?int?? m_nBubbleCount;以及一個(gè)存放自定義客戶區(qū)矩形的數(shù)據(jù)成員和一個(gè)存放當(dāng)前泡泡顏色設(shè)置的數(shù)據(jù)成員:?CRect ?m_rectClient;??COLORREF? m_colorCurrent;修改對(duì)話框類的OnInitDialog()成員函數(shù),添加計(jì)算自定義客戶區(qū)位置和大小的代碼,并將泡泡的數(shù)目初始化為0:BOOLCMyDlg::OnInitDialog(){ CDialog::OnInitDialog();?CStat(yī)ic*pST=(CStatic*)GetDlgItem(IDC_CLIENT);?pST-〉GetWindowRect(&m_rectClient);?ScreenToClient(&m_rectClient); m_nBubbleCount=0;??returnTRUE;}?修改OnPaint()成員函數(shù),添加畫(huà)出泡泡的有關(guān)代碼:voidCMyDlg::OnPaint(){?CPaintDCdc(this); CRgnrgn;?rgn.CreateRectRgnIndirect(&m_rectClient);?//生成一個(gè)區(qū)域?qū)ο?dc.SelectClipRgn(&rgn);??????//選擇區(qū)域?dc.Rectangle(m_rectClient);?? ? //將客戶區(qū)背景設(shè)置?CBrushbrushNew,*pbrushOld; ???//白色?for(inti=0;i<m_nBubbleCount;i++)?{? ??brushNew。CreateSolidBrush(m_colorBubble[i]);??pbrushOld=dc。SelectObject(&brushNew); ??dc.Ellipse(m_rectBubble[i]);? dc.SelectObject(pbrushOld);??? brushNew.DeleteObject(); }}?修改由ClassWizard生成的鼠標(biāo)左鍵消息響應(yīng)函數(shù)OnLButtonDown(),添加吹泡泡的有關(guān)代碼:voidCMyDlg::OnLButtonDown(UINTnFlags,CPointpoint){?if(m_nBubbleCount<MAX_BUBBLE)?{? ? intr=rand()%50+10;??CRectrect(point.x-r,point.y-r,point.x+r,point。y+r);????m_rectBubble[m_nBubbleCount]=rect;? m_colorBubble[m_nBubbleCount]=m_colorCurrent; ? m_nBubbleCount++; ?InvalidateRect(rect,F(xiàn)ALSE);?}}?最后修改由ClassWizard生成的按鈕消息響應(yīng)函數(shù)OnColor(),添加調(diào)用顏色設(shè)置公用對(duì)話框的代碼:voidCMyDlg::OnColor(){?m_colorCurrent=RGB(200,200,200); CColorDialogdlg(m_colorCurrent); if(dlg。DoModal()==IDOK)??? m_colorCurrent=dlg.GetColor();} 輸入輸出:鼠標(biāo)左鍵點(diǎn)擊對(duì)話框中的客戶區(qū)可生成有關(guān)泡泡,按下按鈕“顏色設(shè)置”可調(diào)用顏色設(shè)置公用對(duì)話框設(shè)置泡泡的顏色(圖15-2).圖15-2基于對(duì)話框的吹泡泡程序?分析:在OnI(lǐng)nitDialog()函數(shù)中,對(duì)應(yīng)了一個(gè)指向CStat(yī)ic對(duì)象的指針pST并使之與對(duì)話框模板上的圖片控件IDC_CLIENT聯(lián)系起來(lái)。通過(guò)該指針調(diào)用成員函數(shù)GetWindowRect()(實(shí)際上是從CWnd類繼承來(lái)的)取得該控件的矩形框。由于該矩形采納屏幕坐標(biāo),所以還要使用ScreenToClient()成員函數(shù)將其轉(zhuǎn)換為對(duì)對(duì)話框的相對(duì)坐標(biāo)。圖15-2基于對(duì)話框的吹泡泡程序 在OnPaint()函數(shù)中,首先依據(jù)圖片控件的參數(shù)建立一個(gè)CRgn類的對(duì)象,然后使用CDC類的成員函數(shù)SelectClipRgn()使裁剪區(qū)域生效.由于圖片控件的內(nèi)部仍為對(duì)話框的底色(灰色),因此在其相應(yīng)位置上畫(huà)了一個(gè)缺省設(shè)置矩形,使客戶區(qū)變?yōu)榘咨??自學(xué)內(nèi)容15.3動(dòng)畫(huà)控件?動(dòng)畫(huà)控件用來(lái)在一塊矩形區(qū)域中播放簡(jiǎn)潔的AVI動(dòng)畫(huà)文件。動(dòng)畫(huà)控件可在編輯對(duì)話框模板時(shí)加入對(duì)話框,其主要屬性有:? ID ????說(shuō)明? ???設(shè)置方法ACS_CENTER??動(dòng)畫(huà)在控件中央播放 Styles/CenterACS_TRANSPARENT 透明背景 ???Styles/TransparentACS_AUTOPLAY??打開(kāi)后自動(dòng)播放??Styles/Autoplay?動(dòng)畫(huà)控件對(duì)應(yīng)CAnimateCtrl類對(duì)象。CAnimateCtrl類的主要成員函數(shù)有:?1.打開(kāi)AVI文件成員函數(shù),原型為:? BOOLCAnimateCtrl::Open(LPCTSTRlpszFileName);??BOOLCAnimateCtrl::Open(UINTnI(lǐng)D);其中參數(shù)lpszFileName為AVI文件名,nID為動(dòng)畫(huà)資源的ID。?2.播放動(dòng)畫(huà)成員函數(shù),原型為:? BOOLCAnimat(yī)eCtrl::Play(UINTnFrom,UINTnTo,UINTnRep);其中參數(shù)nFrom為起始位置,nTo為終止位置,若?。埃鳩FFF為播放到結(jié)束為止。nRep為播放次數(shù),若?。癤FFFF則為循環(huán)播放。?3.停止播放動(dòng)畫(huà)函數(shù),原型為:BOOLCAnimateCtrl::Stop();?4.查找指定畫(huà)面函數(shù),原型為: ?BOOLCAnimateCtrl::Seek(UINTnTo);其中參數(shù)nTo為指定位置。?5。關(guān)閉動(dòng)畫(huà)函數(shù),原型為:? BOOLCAnimateCtrl::Close(); [例15—3]動(dòng)畫(huà)播放器程序,可用文件查找公用對(duì)話框打開(kāi)AVI文件并播放。?說(shuō)明:用AppWizard生成一個(gè)基于對(duì)話框的應(yīng)用程序框架并編輯對(duì)話框模板資源。首先刪除原來(lái)全部的控件,然后為其添加一個(gè)動(dòng)畫(huà)控件,設(shè)置其ID為IDC_AVI和屬性Styles/Center,然后適當(dāng)調(diào)整其大小和位置. 為對(duì)話框模板添加3個(gè)按鈕,其屬性如下: ?ID?? Caption ?消息響應(yīng)函數(shù)? IDC_PLAY?Pl(wèi)ay ??OnPlay() ?IDC_OPEN?Open OnOpen()??IDC_STOP?Stop???OnStop()圖15—3動(dòng)畫(huà)播放器?用ClassWizard為動(dòng)畫(huà)控件添加一個(gè)CAnimateCtrl類的數(shù)據(jù)成員m_ctrAvi,并為3個(gè)按鈕添加對(duì)應(yīng)的消息響應(yīng)函數(shù).編輯好的對(duì)話框模板如圖15-3所示. 程序:首先在對(duì)話框類定義中添加一個(gè)存放AVI文件名的變量:?CStringm_strAviname;并在OnInitDialog()函數(shù)中添加初始化代碼: ?m_strAviname=_T(“”);?修改對(duì)應(yīng)于3個(gè)按鈕的消息響應(yīng)函數(shù):voidCMy1503Dlg::OnOpen(){?CFileDialogdlg(TRUE,"。AVI","*。AVI”,OFN_FILEMUSTEXIST|OFN_LONGNAMES|OFN_PATHMUSTEXIST,"*.AVI",this);?if(dlg.DoModal()==IDOK)?{ ???m_ctrAvi.Close();??m_strAviname=dlg。GetPathName(); ???m_ctrAvi。Open(LPCTSTR(m_strAviname));?}}voidCMy1503Dlg::OnPl(wèi)ay(){?m_ctrAvi。Play(0,0xffff,0xffff);}voidCMy1503Dlg::OnStop(){?m_ctrAvi。Stop();} 輸入輸出:按下Open按鈕可調(diào)出一個(gè)文件搜尋公用對(duì)話框,找到一個(gè)AVI文件后可進(jìn)行播放。按下Play按鈕后可重復(fù)播放動(dòng)畫(huà),按下Stop按鈕后可停止播放.調(diào)試技術(shù)15。4用AppWizard生成基于對(duì)話框的應(yīng)用程序用AppWizard創(chuàng)建基于對(duì)對(duì)話框的應(yīng)用程序比較簡(jiǎn)潔:使用DeveloperStudio的菜單選項(xiàng)File/New…,在New對(duì)話框中的Projects選項(xiàng)卡中選用MFCAppWizard(exe)并填寫(xiě)ProjectName(項(xiàng)目名),然后按OK按鈕。在AppWizard第1步對(duì)話框中,選擇生成DialogBased(基于對(duì)話框)的應(yīng)用程序即可,以下步驟與生成基于文檔/視圖結(jié)構(gòu)的應(yīng)用程序類似,只是更簡(jiǎn)潔些。生成基于對(duì)話框的應(yīng)用程序只需4步,第2步用于設(shè)置應(yīng)用程序的屬性,包括是否使用版權(quán)對(duì)話框、是否需要生成上下文有關(guān)的幫助、是否使用3D風(fēng)格的控件,以及是否需要對(duì)ActiveX控件的支持等問(wèn)題.通常這些屬性均可使用缺省設(shè)置。第3步用于設(shè)置程序風(fēng)格,第4步用于檢查和修改擬為應(yīng)用程序生成的類的有關(guān)參數(shù),這兩步與生成基于文檔/視圖結(jié)構(gòu)的應(yīng)用程序框架中的對(duì)應(yīng)步驟相同。在AppWizard生成源代碼基礎(chǔ)上開(kāi)發(fā)程序格外容易,例如OnInitDialog()函數(shù),只需在該函數(shù)的“TODO”行后添加自己的初始化代碼即可。程序員所要做的主要是編輯對(duì)話框模板資源,利用ClassWizard為對(duì)話框類添加相應(yīng)的數(shù)據(jù)成員和消息響應(yīng)函數(shù),以及為這些函數(shù)添加必要的程序代碼。程序設(shè)計(jì)舉例[例15-4]編寫(xiě)一個(gè)計(jì)算器程序.
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年貨物運(yùn)輸合同規(guī)定運(yùn)輸方式與責(zé)任
- 2025年度歷史建筑保護(hù)拆墻工程合作協(xié)議4篇
- 2024豬場(chǎng)租賃承包合同
- 2024節(jié)能減排協(xié)議書(shū)
- 《中樞性高熱患者的護(hù)理與治療》課件
- 2025年度新媒體運(yùn)營(yíng)與公關(guān)合作服務(wù)合同范本4篇
- 2024年05月云南廣發(fā)銀行昆明分行招考筆試歷年參考題庫(kù)附帶答案詳解
- 2025年度大數(shù)據(jù)分析服務(wù)合同樣本8篇
- 2025變頻器代理商銷售合同:市場(chǎng)拓展與品牌推廣合作3篇
- 二零二五年度高端酒店集團(tuán)食材供應(yīng)與服務(wù)合同3篇
- 常見(jiàn)老年慢性病防治與護(hù)理課件整理
- 履約情況證明(共6篇)
- 云南省迪慶藏族自治州各縣區(qū)鄉(xiāng)鎮(zhèn)行政村村莊村名居民村民委員會(huì)明細(xì)
- 設(shè)備機(jī)房出入登記表
- 六年級(jí)語(yǔ)文-文言文閱讀訓(xùn)練題50篇-含答案
- 醫(yī)用冰箱溫度登記表
- 零售學(xué)(第二版)第01章零售導(dǎo)論
- 大學(xué)植物生理學(xué)經(jīng)典05植物光合作用
- 口袋妖怪白金光圖文攻略2周目
- 光伏發(fā)電站集中監(jiān)控系統(tǒng)通信及數(shù)據(jù)標(biāo)準(zhǔn)
- 三年級(jí)下冊(cè)生字組詞(帶拼音)
評(píng)論
0/150
提交評(píng)論