第二章Windows程序設(shè)計ppt.ppt_第1頁
第二章Windows程序設(shè)計ppt.ppt_第2頁
第二章Windows程序設(shè)計ppt.ppt_第3頁
第二章Windows程序設(shè)計ppt.ppt_第4頁
第二章Windows程序設(shè)計ppt.ppt_第5頁
已閱讀5頁,還剩180頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、目錄,2.1 Windows操作系統(tǒng)介紹 2.2 Windows 編程模式 2.3 結(jié)束語,第二章 Windows程序設(shè)計,Windows是一個具有可視化圖形用戶界面的多任務(wù)的操作系統(tǒng),它為用戶提供了風(fēng)格統(tǒng)一的由窗口、菜單、工具欄等界面元素所構(gòu)成的多任務(wù)環(huán)境。,2.1 Windows操作系統(tǒng)介紹,2.1.1 Windows操作系統(tǒng)的發(fā)展簡介 1. Microsoft公司早在1985年和1987年分別推出 Windows 1.03版和Windows2.0版。 2.1990年5月推出Windows3.0 。,3.1991年推出Windows3.1 。 4.1995年推出新一代操作系統(tǒng)Windows

2、95 ,是操作系統(tǒng)發(fā)展史上一個里程碑式的作品 。,2.1.2. Windows操作系統(tǒng)的特點(diǎn),直觀、高效、統(tǒng)一的面向?qū)ο蟮膱D形用戶界面,易學(xué)易用,豐富的設(shè)備無關(guān)的圖形操作,多任務(wù)多進(jìn)程,2.1.3. Windows的內(nèi)存管理 Windows系統(tǒng)采用虛擬內(nèi)存,在操作系統(tǒng)中有兩種存貯器,物理存貯器和虛擬存貯器 。,虛擬內(nèi)存系統(tǒng)的工作過程如下:,1.當(dāng)建立一個新進(jìn)程時,操作系統(tǒng)賦予每個進(jìn)程2GB的虛擬地址(不是內(nèi)存)。,2.虛擬內(nèi)存管理器把應(yīng)用程序的代碼映射到應(yīng)用程序的 虛擬地址空間的某個位置,并把當(dāng)前所需要的代碼加 載到物理內(nèi)存。,3.如果應(yīng)用程序使用了動態(tài)鏈接庫(DLL),則被映射到 進(jìn)程的虛擬

3、地址空間,并在需要時加載到物理內(nèi)存。,4.程序的數(shù)據(jù)存儲和棧操作等需要的空間在物理內(nèi)存中 分配,并映射到虛擬地址空間。,5.應(yīng)用程序使用虛擬地址空間中的地址開始執(zhí)行,虛擬 內(nèi)存管理器把每個對內(nèi)存的訪問映射到物理內(nèi)存的某個 位置,從而訪問數(shù)據(jù)。,2.2.Windows 編程模式 由于Windows 操作系統(tǒng)完全不同于單任務(wù)的MS-DOS 操作系統(tǒng),Windows程序設(shè)計有著完全不同模式,具有圖 形用戶界面、多任務(wù)、多窗口等特點(diǎn)。 Visual C+提供兩套完整的Windows 程序開發(fā)系統(tǒng):,直接使用Windows提供的API 函數(shù); 采用面向?qū)ο蟮姆绞剑褂梦④浕A(chǔ)類庫MFC 。,Window

4、s API是Windows 系統(tǒng)和Windows 應(yīng)用程序間的標(biāo)準(zhǔn)接口,為應(yīng)用程序提供Windows支持的函數(shù)定義、參數(shù)定義和消息格式等。,標(biāo)準(zhǔn)Win32 API 函數(shù)可以分為以下幾類:,1) 系統(tǒng)服務(wù),2) 通用控件庫,3) 圖形設(shè)備接口,4) 網(wǎng)絡(luò)服務(wù),5) 用戶接口,6) 系統(tǒng)Shell,7) Windows 系統(tǒng)信息,2.2.1 Windows API簡介,2.2.2 Windows程序設(shè)計的基本概念,1.窗口 -窗口是Windows程序的基本操作單元,是應(yīng)用程序與用戶之間進(jìn)行交互的接口,也是系統(tǒng)管理應(yīng)用程序的基本單位。 編寫應(yīng)用程序其實就是創(chuàng)建一個或多個窗口,程序的執(zhí)行過程是窗口內(nèi)部

5、、窗口與窗口之間以及窗口與系統(tǒng)之間進(jìn)行數(shù)據(jù)交換與處理的過程。,在winuser.h中定義了代表窗口的WNDCLASS結(jié)構(gòu)類型。 typedef struct tagWNDCLASS UINT style; / 窗口風(fēng)格 WNDPROC lpfnWndProc; /指向窗口處理函數(shù)的函數(shù)指針 int cbClsExtra; /窗口結(jié)構(gòu)中的預(yù)留字節(jié)數(shù) int cbWndExtra; / 本窗口創(chuàng)建的其它窗口結(jié)構(gòu)中預(yù)留字節(jié)數(shù) HINSTANCE hInstance; /注冊該窗口類的實例句柄 HICON hIcon; /代表該窗口類的圖標(biāo)句柄 HCURSOR hCursor; / 該窗口客戶區(qū)鼠標(biāo)光

6、標(biāo)句柄 HBRUSH hbrBackGround; /該窗口背景顏色句柄 LPCSTR lpszMenuName; /指向窗口菜單名的字符指針 LPCSTR lpszClassName; /指向窗口名的字符指針 WNDCLASS, *PWNDCLASS, NEAR *NPWNDCLASS, FAR *LPWNDCLASS;,2.句柄和Windows對象,Windows對象-窗口、圖標(biāo)、光標(biāo)、菜單及正在運(yùn)行的應(yīng)用程序?qū)嵗鹊取?句 柄-系統(tǒng)用來唯一標(biāo)識某個Windows對象的一個無符號整數(shù),相當(dāng)于Windows對象的名字,應(yīng)用程序只有通過句柄才能使用Windows對象。,應(yīng)用程序是通過恒定不變的

7、句柄來訪問程序中各個對 象的。這是多任務(wù)操作系統(tǒng)對多個進(jìn)程進(jìn)行管理的基本 手段。,Windows常用句柄類型如下所示:,句柄類型 說明 HANDLE 一般類型句柄 HWND 窗口類型句柄 HINSTANCE 程序?qū)嵗浔?HCURSOR 光標(biāo)類型句柄 HFONT 字體類型句柄 HPEN 畫筆類型句柄,HBRUSH 畫刷類型句柄 HDC 設(shè)備描述表類型句柄 HICON 圖標(biāo)類型句柄 HMENU 菜單類型句柄 HBITMAP 位圖類型句柄 HFILE 文件類型句柄,3.事件與消息,事件-在Windows環(huán)境下,應(yīng)用程序啟動后,系統(tǒng)等待用戶在圖形用戶界面內(nèi)的輸入選擇,如鼠標(biāo)按鍵、鍵盤按鍵、窗口被創(chuàng)建

8、、關(guān)閉、改變大小、移動等。 只要有事件發(fā)生,系統(tǒng)即產(chǎn)生特定的消息,消息描述了事件的類別,包含了相關(guān)信息,Windows應(yīng)用程序利用消息與系統(tǒng)及其它應(yīng)用程序進(jìn)行信息交換。 由于windows事件的發(fā)生的是隨機(jī)的,程序的執(zhí)行先后順序也無法預(yù)測,系統(tǒng)采用消息隊列來存放事件發(fā)生的消息,然后從消息隊列中依次取出消息進(jìn)行相應(yīng)的處理。,在winuser.h中,消息結(jié)構(gòu)的定義如下:,typedef struct tagMSG HWND hWnd; /指定消息發(fā)向的窗口句柄 UINT message; /標(biāo)識消息的消息值 WPARAM wParam; /消息參數(shù) LPARAM lParam; /消息參數(shù) DWO

9、RD time; /消息進(jìn)入隊列的時間 POINT pt; /消息進(jìn)入隊列時鼠標(biāo)指針的屏幕坐標(biāo) MSG,*PMSG,NEAR *NPMSG, FAR * LPMSG;,下面介紹消息結(jié)構(gòu)中各個成員的意義: a) message是標(biāo)識消息的消息值或消息名。每個消息 都有唯一一個數(shù)值標(biāo)識,常用不同前綴的符號常量以示 區(qū)別。例如,WM_表示窗口消息 。,Windows常用的窗口消息和消息值定義, 定義于winuser.h中: #define WM_CREATE 0X0001 /創(chuàng)建窗口產(chǎn)生的消息 #define WM_DESTROY 0X0002 /撤銷窗口產(chǎn)生的消息 #define WM_PAINT

10、 0X000F /重畫窗口產(chǎn)生的消息 #define WM_CLOSE 0X0010 /關(guān)閉窗口產(chǎn)生的消息 #define WM_CHAR 0X0102 /按下非系統(tǒng)鍵產(chǎn)生的字符消息 #define WM_USER 0X0400 /用戶自定義消息,b) wParam和lParam都是32位消息參數(shù),其數(shù)據(jù)類型在windef.h中定義如下: typedef UINT WPARAM; typedef LONG LPARAM;,c) pt表示消息進(jìn)入消息隊列時鼠標(biāo)指針的屏幕坐標(biāo),POINT是定義在windef.h中的結(jié)構(gòu)體,表示屏幕上一個點(diǎn): typedef struct tagPOINT LONG

11、 x; /表示點(diǎn)的屏幕橫坐標(biāo) LONG y; /表示點(diǎn)的屏幕縱坐標(biāo) POINT, PPOINT,NEAR *NPPOINT,FAR *LPPOINT;,4.進(jìn)程與線程 32位Windows提供“進(jìn)程-線程-窗口”的模式來管理運(yùn)行的程序。 “程序”指存儲在介質(zhì)上、含有指令和數(shù)據(jù)的文件,是一個被動的對象; “進(jìn)程”是一個被運(yùn)行的程序的實例,代表了內(nèi)存中正在運(yùn)行的指令和系統(tǒng)資源,如地址空間、打開的文件等,是一個主動對象。 “進(jìn)程”又分為“動態(tài)”和“靜態(tài)”的兩部分,其中“動 態(tài)”部分形成“線程”概念。,進(jìn)程并不執(zhí)行代碼,它只是線程的容器,擁有系統(tǒng)資源和私有資源。 當(dāng)創(chuàng)建一個進(jìn)程的同時也創(chuàng)建了第一個線程

12、,稱為“主線程”,線程是進(jìn)程主動的關(guān)鍵。主線程的入口函數(shù)是WinMain。之后,主線程可以在進(jìn)程中再創(chuàng)建一個或多個線程,即“多線程”,多個線程共享進(jìn)程的靜態(tài)部分。使用進(jìn)程-線程模式,是因為創(chuàng)建一個線程比一個進(jìn)程所需資源要少,且線程間共享進(jìn)程地址空間,簡化了進(jìn)程間的通信,可提高程序執(zhí)行效率。,窗口是應(yīng)用程序和用戶進(jìn)行交互的接口,窗口總是由線程擁有,一個線程可以擁有一個或多個窗口,也可沒有窗口。關(guān)系如下圖所示:,進(jìn)程1,線程1.1,線程1.2,線程1.3,窗口1.1.2,窗口1.1.1,窗口1.1.3,進(jìn)程2,線程2.1,窗口2.1.1,5.資源共享,不同之處: DOS程序:在運(yùn)行時獨(dú)占系統(tǒng)的全部

13、資源,包括顯示器、 內(nèi)存等,直到程序結(jié)束時才釋放資源。 Windows:它是一個多任務(wù)的操作系統(tǒng),各個應(yīng)用程序 共享系統(tǒng)提供的資源。,Windows的基本模式是: 向Windows系統(tǒng)請求資源 ; 使用該資源; 釋放該資源給Windows以供別的程序使用。,注意: 1.最容易忽略的是第三步,如果忽略了這一步,會 出現(xiàn)程序運(yùn)行出現(xiàn)異常情況,或干擾其它程序正 常運(yùn)行,甚至造成立即死機(jī),如設(shè)備上下文沒有 釋放時。,2.CPU也是一種非常重要的資源,應(yīng)用程序應(yīng)避免長 時間的占用CPU資源;如果確實需要這樣做,也應(yīng) 當(dāng)采取一些措施,以讓程序能夠響應(yīng)用戶的輸入。,3.主存也是一個共享資源,要防止同時運(yùn)行的

14、多個應(yīng) 用程序因協(xié)調(diào)不好而耗盡內(nèi)存資源。,6.數(shù)據(jù)類型,包括簡單類型和結(jié)構(gòu)類型,常用數(shù)據(jù)類型說明如下: 數(shù)據(jù)類型 說 明 BYTE 8位無符號字符 BSTR 32位字符指針 COLORREF 32位整數(shù),表示一個顏色 WORD 16位無符號整數(shù) LONG 32位有符號整數(shù) DWORD 32位無符號整數(shù) UINT 32位無符號整數(shù) BOOL 布爾值,值為TRUE或FALSE,2.2.3 Windows 程序結(jié)構(gòu),1.Windows應(yīng)用程序的構(gòu)成,組成:程序代碼、用戶界面資源和動態(tài)鏈接庫庫模塊(dynamic-link library) 。,程序代碼主要由可執(zhí)行代碼構(gòu)成 資源是應(yīng)用程序所能夠使用的

15、一類預(yù)定義工具, 用戶界面資源是應(yīng)用程序定義的圖形用戶接口GUI ( graphical user interface),如菜單、對話框、按鈕等。,資 源類型 說明 快捷鍵(Accelerator) 存貯擊鍵和命令組合 位圖 (Bitmap) 包括Windows匹配格式的圖形 對話框(Dialogbox) 對話框控件細(xì)節(jié)、布局、屬性 圖標(biāo)(Icon) 存貯圖標(biāo)用位圖組 菜單(Menu) 菜單和菜單組文本和布局細(xì)節(jié) 字符串表(String table) 存字符串和相關(guān)標(biāo)識符(ID)值 工具欄(Toolbar) 工具欄布局細(xì)節(jié)和畫按鈕所用的位圖 版本消息 (Cursor) 程序狀態(tài)消息,如程序名,

16、作者,拷貝日期 版本號光標(biāo)包括畫光標(biāo)用的特殊位圖,常用資源如下:,Windows應(yīng)用程序的創(chuàng)建與控制臺應(yīng)用類似,要經(jīng)過編譯、鏈接兩個階段,要增加資源編輯、編譯過程。,過程如下圖:,集成開發(fā)環(huán)境,應(yīng)用程序向?qū)?資源編輯器,Create,.DEF,.CPP .H,.DSW .DSP,.ICC,.RC,.BMP,源文件,資源文件,編譯,.obj,Build,資源編譯,.res,應(yīng)用程序,2.應(yīng)用程序的執(zhí)行過程,(1)操作系統(tǒng)接收命令后,創(chuàng)建新的進(jìn)程和初始 線程 (initial thread)。 (2)應(yīng)用代碼加載內(nèi)存。 (3)如應(yīng)用了DLL,則加載DLL到內(nèi)存。 (4)為項目空間(如數(shù)據(jù)和堆棧)分

17、配物理內(nèi)存, 并映射到虛擬地址空間。 (5)應(yīng)用程序開始執(zhí)行。,3.處理消息,消息處理過程如下圖所示:,硬件消息,系統(tǒng)隊列,應(yīng)用1消息隊列,應(yīng)用2消息隊列,應(yīng)用3消息隊列,消息循環(huán),窗口過程,缺省 窗口過程,發(fā)送消息,派發(fā)消息,應(yīng)用3,(1).當(dāng)Windows應(yīng)用程序開始執(zhí)行,操作系統(tǒng)在預(yù)定的入口WinMain與應(yīng)用程序連接; (2).應(yīng)用程序創(chuàng)立一個或更多的窗口,每個窗口(包括對話框)都有一個窗口過程函數(shù),程序通過窗口接收用戶的輸入和決定窗口顯示; (3).各種輸入產(chǎn)生的消息首先進(jìn)入系統(tǒng)隊列,由系統(tǒng)根據(jù)產(chǎn)生消息的窗口將消息發(fā)至窗口所在應(yīng)用程序的消息隊列; (4).程序的消息循環(huán)代碼段檢索從消

18、息隊列中來的消息,并把它們返回Windows,由Windows發(fā)給適當(dāng)?shù)拇翱谶^程函數(shù)進(jìn)行處理,對于程序未響應(yīng)的消息,發(fā)給缺省窗口過程函數(shù)進(jìn)行處理。,2.2.4 Windows 程序設(shè)計實例,例一.最簡單的Windows應(yīng)用程序,輸出一個消息窗口。,過程:,(1).創(chuàng)建工程,選擇File|New菜單項,如圖2.4, 在Project頁面,選擇Win32 Application工程類型, 輸入工程名Ex2_1并選擇工程路徑,按OK按鈕至下一步;,(2).在Win32 Application-Step 1 of 1對話框(圖2.5), 選擇A Simple Win32 Application單選項,

19、 按Finish按鈕;,(3).集成開發(fā)環(huán)境為工程生成stdafx.h, stdafx.cpp 和Ex2_1.cpp文件,并產(chǎn)生了WinMain函數(shù)的框架。 在WinMain函數(shù)體內(nèi),加入Messagebox一條語句。 #include stdafx.h int APIENTRY WinMain ( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTRlpCmdLine, int nCmdShow ) MessageBox(NULL, “My first Windows Applicaion! ”, “Ex2_1”, MB_OK ); retu

20、rn 0; ,(4).選擇Build|Build Ex2_1.exe菜單項創(chuàng)建可執(zhí)行 文件,然后選擇Build|Exacute Ex2_1.exe, 執(zhí)行程序,結(jié)果如圖2.6。,圖2.4,圖2.5,圖2.6,說明:,1.(1)stdafx.h是一個預(yù)編譯頭文件,Windows包含進(jìn) 程序的頭文件很多,在程序開發(fā)過程中需要不 斷地編譯,如果每次全部重新編譯非常浪費(fèi)時間;,(2)stdafx的目的就是將前面編譯的結(jié)果儲存起來, 下一次編譯時從磁盤取出來,對未修改部分不再 重新編譯,這樣可大大節(jié)省編譯時間;,(3)stdafx.cpp中主要有包含windows.h一條指令, windows.h wi

21、ndows.h是windows程序最基本的 頭文件,它們定義了windows的所有數(shù)據(jù)類型、 數(shù)據(jù)結(jié)構(gòu)、符號常量和API函數(shù)原型聲明。,2. WinMain函數(shù)是windows程序的入口函數(shù),包含4個參數(shù):,(1)hInstance是唯一標(biāo)識本程序的實例句柄,系統(tǒng) 和其它應(yīng)用程序通過該句柄與本程序通訊。,(2)hPrevInstance是本程序的前一個實例句柄,由 于32位windows采用進(jìn)程線程模式,每一線程 擁有自己的句柄,因此該參數(shù)始終為空。,(3)lpCmdLine是一個字符串指針,指向命令行參數(shù) 字符串,沒有命令行參數(shù)時為空。,(4)nCmdShow指明程序最初運(yùn)行時窗口打開方式,

22、 如正常方式、最大化或最小化運(yùn)行。,(5)WinMain返回一個整數(shù)值,作為退出代碼。 APIENTRY表示函數(shù)調(diào)用約定,函數(shù)調(diào)用時參數(shù) 按從左至右的順序壓入棧,由被調(diào)用者將參數(shù) 彈出棧。,3.MessageBox 是一個API函數(shù),顯示一個消息框, 其原型為:,int WINAPI MessageBox(HWND hWnd, LPCSTR lpszText, LPCSTR lpszCaption,UINT uType);,第一個參數(shù)指明此消息框的父窗口句柄, 為NULL 則說明沒有父窗口; 第二、三個參數(shù)類型均為字符型指針,分別指向消 息框中要顯示的字符串和消息框標(biāo)題欄 顯示的字符串; 第四

23、個參數(shù)是一個無符號整數(shù),表明消息框中顯示 的按鈕和風(fēng)格。,Windows已有定義:,#define MB_OK 0 x00000000L / OK按鈕 #define MB_OKCANCEL 0 x00000001L / OK和CANCEL兩個按鈕 #define MB_ABORTRETYRIG NORE 0 x00000002L / ABORT、RETRY 、/IGNORE三個按鈕 #define MB_YESNOCANCEL 0 x00000003L / YES、NO、CANCEL三/個按鈕,uType參數(shù) 即可取這些定義值或是它們按位或運(yùn)算的組合。,MessageBox返回所按下按鈕的I

24、D值。 即Windows用一個無符號整數(shù)唯一表示某個資源(對話框、按鈕、菜單等等),并定義一個唯一的符號常量與之對應(yīng),稱為資源的ID值。,windows內(nèi)部定義的部分資源標(biāo)識:,#define IDOK 1 / OK按鈕ID值 #define IDCANCEL 2 / CANCEL按鈕ID值 #define IDABORT 3 / ABORT 按鈕ID值 #define IDRETRY 4 / RETRY按鈕ID值 #define IDIGNORE 5 / IGNORE按鈕ID值 #define IDYES 6 / YES按鈕ID值 #define IDNO 7 / NO按鈕ID值,例2顯示一

25、個窗口的Windows應(yīng)用程序。,工程創(chuàng)建方法同例1,按下面內(nèi)容編輯源文件Ex2_2.cpp。,#include /包含windows.h頭文件 LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM );/窗口函數(shù)聲明 /*入口函數(shù) WinMain()*/ int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine,int nCmdShow) WNDCLASS wndclass; /定義窗口類結(jié)構(gòu)變量 HWND hwnd; /定義窗口句柄

26、MSG msg; /定義消息結(jié)構(gòu)變量,/定義窗口類 wndclass.style = CS_HREDRAW|CS_VREDRAW; /改變窗口口大小則重畫 wndclass.lpfnWndProc = WndProc; /窗口函數(shù)為 WndProc wndclass.cbClsExtra = 0; /窗口類無擴(kuò)展 wndclass.cbWndExtra = 0; /窗口實例無擴(kuò)展 wndclass.hInstance = hInstance; /注冊窗口類的實例句柄 wndclass.hIcon = LoadIcon(NULL,IDI_APPLICATION);/窗口用默認(rèn)光標(biāo) wndclas

27、s.hCursor = LoadCursor(NULL,IDC_ARROW); /顯口用箭頭光標(biāo) wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); /背景為白色 wndclass.lpszMenuName = NULL; /窗口缺省無菜單 wndclass.lpszClassName = Ex2_2; /窗口類名為Ex2_2 /注冊窗口類。若失敗則返回,/顯示并更新窗口 ShowWindow(hwnd,nCmdShow); /顯示窗口 UpdateWindow(hwnd); /更新窗口的客戶區(qū) /消息循環(huán) while(G

28、etMessage( /返回退出值 /窗口函數(shù) LRESULT CALLBACK WndProc(HWND hwnd,UINT message, WPARAM wParam, LPARAM lParam), /根據(jù)消息值轉(zhuǎn)相應(yīng)的消息處理 switch(message) /重畫窗口客戶區(qū)消息處理 case WM_PAINT: HDC hdc; /定義設(shè)備描述表句柄 PAINTSTRUCT ps; /定義繪圖信息結(jié)構(gòu)變量 hdc = BeginPaint(hwnd,程序的運(yùn)行結(jié)果:,/撤消窗口消息處理 case WM_DESTROY: PostQuitMessage(0); /產(chǎn)生退出程序消息WM

29、_QUIT return 0; return DefWindowProc(hwnd, message, wParam, lParam); /其它轉(zhuǎn)缺省窗口函數(shù) ,說明:,1.WinMain-在WinMain中主要完成以下工作:,(1)定義一個窗口類,包括定義窗口對象并對它的相關(guān)成員賦值;,(2)注冊窗口類,調(diào)用RegisterClass注冊窗口類,并判斷是否 注冊成功。其參數(shù)是WNDCLASS結(jié)構(gòu)類型指針,用需要注冊的 窗口對象地址進(jìn)行調(diào)用;,(3)創(chuàng)建窗口,定義注冊窗口后,可以創(chuàng)建一個或多個同類型的 窗口;由API函數(shù)CreateWindow創(chuàng)建窗口,并返回所創(chuàng)建窗口 的句柄;,(4)調(diào)用A

30、PI函數(shù)ShowWindow和UpdateWindow顯示并更新窗口, 它們的參數(shù)相同,第一個參數(shù)是要顯示的窗口句柄,第二個 參數(shù)是窗口顯示的方式;,(5)程序運(yùn)行的準(zhǔn)備工作完成, 進(jìn)入消息循環(huán)(while循環(huán)), GetMessage函數(shù)從應(yīng)用程序消息隊列中讀取消息, TranslateMessage函數(shù)進(jìn)行鍵盤消息轉(zhuǎn)換, 然后由DispatchMessag將消息派送給相應(yīng)的窗口函數(shù)進(jìn)行處理 當(dāng)消息隊列為空時, 應(yīng)用程序進(jìn)入等待狀態(tài),等待用戶輸入。,當(dāng)GetMessage獲取到WM_QUIT消息時,返回FALSE,結(jié)束 消息循環(huán)。,a.GetMessage函數(shù)原型如下: BOOL WINAP

31、I GetMessage (LPMSG, HWND, UINT, UINT );,其中 第一個參數(shù)為存放消息的MSG結(jié)構(gòu)指針, 第二個參數(shù)表示接收消息的窗口句柄, 第三、四個參數(shù)分別表示要獲取的最大和最小消息值。 當(dāng)后三個參數(shù)值設(shè)為NULL或0時,表示應(yīng)用程序接收它 所創(chuàng)建的所有窗口的所有消息。,b.TranslateMessage函數(shù)負(fù)責(zé)鍵盤消息轉(zhuǎn)換。,TranslateMessage完成的工作 :,擊鍵消息除字符鍵消息外,其它擊鍵操作產(chǎn)生虛擬鍵消息,包括 WM_KEYDOWN, WM_SYSKEYDOWN, WM_KEYUP, WM_SYSKEYUP, 這些虛擬鍵消息必須通過轉(zhuǎn)換成字符消息

32、程序才能響應(yīng),這就是TranslateMessage完成的工作。,消息派送流程,c.DispatchMessage函數(shù) 負(fù)責(zé)將消息派送到相應(yīng)的窗口函數(shù),如下圖所示:,hWnd Message wParaw Iparam Time Pt,MSG,Ex2_2 Ex2_2 ,HWND,Style Wndproc Ex2_2 Ex2_2,WNDCLASS,2.WndProc函數(shù),-是一個消息處理函數(shù),應(yīng)用程序的表現(xiàn)完全取決于窗口函數(shù)的定義。 WndProc的原型如下: LRESULT CALLBACK WndProc (HWND hwnd,UINT message, WPARAM wParam, LP

33、ARAM lParam); 第一個參數(shù)表示對應(yīng)窗口的句柄, 第二個參數(shù)是需要處理的消息的消息值, 第三、四個參數(shù)包含了相應(yīng)消息的某些信息, 如消息發(fā)生時鼠標(biāo)位置等等。 WndProc函數(shù)的結(jié)構(gòu)是一個switch語句, 根據(jù)消息值不同,選擇不同的case子句執(zhí)行 。,3.進(jìn)隊消息和不進(jìn)隊消息,窗口函數(shù)一般由系統(tǒng)調(diào)用,應(yīng)用程序不直接調(diào)用它,而是通過SendMessage()函數(shù)發(fā)送消息來間接調(diào)用窗口函數(shù)。 消息分為進(jìn)隊消息和不進(jìn)隊消息。,進(jìn)隊消息 -是由windows放入應(yīng)用程序消息隊列、由應(yīng)用程序消息循環(huán)從消息隊列中取出并派送到窗口函數(shù)的消息。,調(diào)用API函數(shù)PostMessage可以派送(di

34、spatch)一條消 息到指定窗口的消息隊列,其原型如下: BOOL WINAPI PostMessage(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam) ; 其中Msg參數(shù)指定了要發(fā)送的消息值(名)。,(2)不進(jìn)隊消息,-不進(jìn)入消息隊列,直接發(fā)送(send)給指定窗口的窗口函數(shù)進(jìn)行處理。,調(diào)用CreateWindow()創(chuàng)建窗口時發(fā)送的WM_CREATE消息, 調(diào)用UpdateWindow()更新窗口時發(fā)送的WM_PAINT消息, 調(diào)用DestroyWindow()時發(fā)送的WM_DESTROY消息, 都是不進(jìn)隊消息。,可以通過調(diào)用Send

35、Message函數(shù)直接發(fā)送消息給窗口: LRESULT WINAPI SendMessage(HWND hWnd,UINT Msg, WPARAM wParam,LPARAM lParam);,4.設(shè)備描述表,WM_PAINT是重畫窗口客戶區(qū)消息,當(dāng)窗口內(nèi)容被 改變、移動或窗口被覆蓋后,需要對窗口進(jìn)行重畫, 一般應(yīng)用程序都需要處理這個消息,處理這一消息 需要獲取設(shè)備描述表句柄。,Windows的圖形設(shè)備接口GDI(Graphics Device Interface)是一組API函數(shù),它提供與設(shè)備無關(guān)的 圖形功能,使應(yīng)用程序在不同圖形設(shè)備(如打印機(jī)) 上進(jìn)行相同的操作(調(diào)用GDI函數(shù)),而無需考

36、慮設(shè) 備的硬件差異,設(shè)備無關(guān)性是通過設(shè)備描述表實 現(xiàn)的。,設(shè)備描述表DC(Device Context) -也稱為設(shè)備上下文,是GDI內(nèi)部定義的一個有圖形對象、圖形方式及其屬性的一個數(shù)據(jù)結(jié)構(gòu),與特定設(shè)備相關(guān),描述了硬件設(shè)備的具體特征信息。,與具體設(shè)備相關(guān)的操作交給DC, 將應(yīng)用程序的設(shè)備無關(guān)圖形功能調(diào)用轉(zhuǎn)換為 在設(shè)備驅(qū)動程序下執(zhí)行的設(shè)備相關(guān)操作。,應(yīng)用程序不能直接訪問設(shè)備描述表, 為了進(jìn)行圖形輸出,必須先獲取設(shè)備描述表句柄, 然后以設(shè)備描述表句柄為參數(shù)調(diào)用GDI函數(shù), 實現(xiàn)圖形功能。,5.應(yīng)用程序的退出,當(dāng)用戶選擇File菜單的退出菜單項時, windows會產(chǎn)生一系列消息, 如鍵盤或鼠標(biāo)消息

37、, WM_SYSCOMMAND消息, WM_CLOSE消息, WM_CLOSE是一條進(jìn)隊消息, 被放入應(yīng)用程序消息隊列中。,GetMessage函數(shù)從消息隊列中取得WM_CLOSE消息,由DispatchMessage派送給窗口函數(shù),窗口函數(shù)中沒有對WM_CLOSE處理的代碼,轉(zhuǎn)由缺省窗口函數(shù)處理,缺省窗口函數(shù)調(diào)用DestroyWindow函數(shù)撤銷窗口,并將不進(jìn)隊消息WM_DESTROY直接發(fā)送給窗口函數(shù),窗口函數(shù)處理WM_DESTROY時調(diào)用函數(shù)void PostQuitMessage(int nExitCode);并產(chǎn)生WM_QUIT消息放入消息隊列中,其中參數(shù)nExitCode是應(yīng)用程序

38、退出代碼。 GetMessage函數(shù)取得WM_QUIT消息后,返回FALSE, 結(jié)束消息循環(huán),此時msg.wParam中存放的是調(diào)用PostQuitMessage時的參數(shù),應(yīng)用程序執(zhí)行下面語句返回此參數(shù)并退出程序。 return msg.wParam;,2.3 結(jié)束語,使用API函數(shù)開發(fā)Windows應(yīng)用程序,程序有大致相同的結(jié)構(gòu),在WinMain中完成定義、注冊、創(chuàng)建、顯示窗口的任務(wù),啟動消息循環(huán),派送不同消息到各個窗口函數(shù)處理;在WndProc函數(shù)中,根據(jù)消息參數(shù)判斷類型,轉(zhuǎn)到相應(yīng)的代碼斷進(jìn)行處理,各種操作都借助API函數(shù)完成。,因此,熟悉掌握Windows程序結(jié)構(gòu)、API函數(shù)的功能 和參

39、數(shù)、各類消息的一般處理方法及參數(shù)的含義, 都非常重要。,3.1.MFC程序設(shè)計介紹 3.2.MFC 程序設(shè)計 3.3.用戶界面資源的應(yīng)用 3.4.對話框的應(yīng)用 3.5.基于對話框的應(yīng)用程序設(shè)計 3.6.文本和圖形輸出 3.7.文檔的保存 3.8.拆分窗口和多視圖的MDI應(yīng)用程序開發(fā),目錄,第三章 用MFC 設(shè)計Windows應(yīng)用程序,微軟基礎(chǔ)類庫MFC(Microsoft Foundation Class), 包含了所有與系統(tǒng)相關(guān)的類(包括圖形用戶界面相關(guān)的類),其中封裝了大多數(shù)的API函數(shù)。約有200個類,提供了應(yīng)用程序框架和創(chuàng)建應(yīng)用程序的組件。同時提供了應(yīng)用程序框架和開發(fā)應(yīng)用程序的工具如應(yīng)

40、用程序向?qū)?、類向?qū)?、可視化資源設(shè)計等高效工具,用消息映射處理消息響應(yīng),大大簡化了Windows應(yīng)用程序的開發(fā)工作,使程序員可以從繁重的編程工作中解脫,提高工作效率。,3.1.MFC程序設(shè)計介紹,MFC類庫分為兩個主要部分:基礎(chǔ)類;宏、全局變量及全局函數(shù)。,3.1.1MFC 的主要類及其層次關(guān)系,MFC中主要包括以下類別:,1. CObject及其派生類,-是大多數(shù)MFC類的基類,它提供序列化 (讀入或保存數(shù)據(jù))、運(yùn)行時類信息、診斷和調(diào)試 支持等等。,常用CObject派生類:,基類 功能 CcmdTarget 所有處理用戶請求的類的基類 CWinApp 代表應(yīng)用程序的核心 Cdocument

41、文檔類儲存應(yīng)用程序數(shù)據(jù)集 CWnd 處理一般Windows消息的圖形用戶界面 對象的基類 CFrameWnd 應(yīng)用程序主窗口框架 Cview 視圖類顯示數(shù)據(jù)并與文檔對象交互,CObject派生類還包括適用于基于Win32 API應(yīng)用 程序的類,如菜單類,圖形類及文件服務(wù)類等。,2. 應(yīng)用程序結(jié)構(gòu)類,-代表應(yīng)用程序的基本組成元素,其中包括 CWinApp,Cdocument,CCmdTarget,CWinThread, CDocTemplate。,當(dāng)運(yùn)行應(yīng)用程序時,這些類首先被實例化,并完成 特定的功能,具體說明如下:,(1).CWinApp,每一個應(yīng)用程序都從CWinApp派生一個 類,并構(gòu)造

42、這個類的一個全局對象,代表應(yīng)用程序本身, 它負(fù)責(zé)初始化應(yīng)用程序,建立文檔模板結(jié)構(gòu),從消息隊 列中讀取消息并派送到相應(yīng)位置進(jìn)行處理,當(dāng)應(yīng)用程序 退出時負(fù)責(zé)清理工作。,(3).CCmdTarget是MFC中與消息映射相關(guān)類的基礎(chǔ)類,所有CCmdTarget派生類都可以處理由選擇菜單產(chǎn)生的命令消息。,(2).CDocument是使用文檔/視圖結(jié)構(gòu)的應(yīng)用程序中的文檔類。應(yīng)用程序從CDocument派生一個類代表應(yīng)用程序的文檔,文檔是程序數(shù)據(jù)的抽象表示,程序設(shè)計者必須決定數(shù)據(jù)在文檔中的具體儲存方式及訪問權(quán)限。,(4).CWinThread類封裝了操作系統(tǒng)的線程,允許MFC程 序創(chuàng)建和操作線程。有關(guān)進(jìn)程與

43、線程的概念見第二章。,(5).CDocTemplate文檔模板類是CSingleDocTemplate和 CMultiDocTemplate的基類,單文檔模板和多文檔模板分 別適應(yīng)于在單文檔界面應(yīng)用和多文檔界面應(yīng)用,功能是 將應(yīng)用框架、文檔、視圖和一系列資源捆綁在一起。,它們在MFC類層次中的關(guān)系如下:,CObject,CCmdTarget,CWinThread,CDocument,CWinApp,CDocTemplate,CSingleDocTemplat,CMultiDocTemplate,3. 用戶界面類,-包括了Windows應(yīng)用程序中所有可視的對象,如窗口、視圖、對話框、菜單和控件,

44、以及Windows 設(shè)備上下文CDC和圖形設(shè)備接口(GDI)等。,用戶界面類派生關(guān)系如下圖:,4. 一般用途的類 包括序列化類CArchive,異常處理類CException, 文件類CFile,這些類不僅可以用于MFC應(yīng)用程序,也 可用于Windows和DOS應(yīng)用程序。,5. 集合類 派生自CObject,有數(shù)組(Array)、列表(List)和映 象(Map)三類,包括CArray,CList模板類,CObArray, CStringArray等數(shù)組類,CPtrList,CObList鏈表類等, 它們封裝了數(shù)據(jù)結(jié)構(gòu)的操作函數(shù),使用這些類可方便地 操作鏈表、數(shù)組等數(shù)據(jù)結(jié)構(gòu)。,6. 非CObj

45、ect派生類 MFC提供一些非CObject派生類,如CString, CRect, CTime, CPoint等等,這些類可以應(yīng)用于非Windows應(yīng)用 程序。,3.1.2.MFC定義的宏、全局函數(shù)及全局變量,1. MFC提供的主要宏:,消息映射宏: 聲明消息映射宏DECLARE_MESSAGE_MAP、 消息映射定義宏BEGIN_MESSAGE_MAP和 END_MESSAGE_MAP對、消息映射表入口宏ON_ 動態(tài)MFC對象宏: DECLARE_DYNCREATE和DECLARE_DYNAMIC, IMPLEMENT_DYNCREATE和IMPLEMENT_DYNAMIC 運(yùn)行時類宏:

46、RUNTIME_CLASS 序列化宏: DECLARE_SERIAL和IMPLEMENT_SERIAL 診斷服務(wù)宏: ASSERT、VERIFY 跟蹤服務(wù)宏: TRACE 異常處理宏: THROW,2. 全局函數(shù),MFC提供一些不屬于任何類的全局函數(shù),函數(shù)名以Afx開頭,可以被應(yīng)用程序中的所有類和函數(shù)所調(diào)用。如AfxAbort(),無條件終止一個應(yīng)用程序的執(zhí)行;AfxGetAppName(),返回指向應(yīng)用程序名的字符串指針,AfxWinInit(),由WinMain()調(diào)用,對MFC應(yīng)用程序進(jìn)行圖形用戶界面(GUI)的初始化等等。,3. 全局變量,全局變量名以afx開頭,如afxTraceFl

47、ag、afxDump 等,主要與異常處理有關(guān)。,3.1.3.MFC命名規(guī)則,MFC采用匈牙利命名法,匈牙利命名法規(guī)定:,變量名以一個或多個小寫字母開頭作為前綴,標(biāo)示變量的數(shù)據(jù)類型;,類型標(biāo)示后是若干個單詞,標(biāo)示變量含義,每個單詞以大寫字母開頭,其余字母小寫;,MFC中所有類及自定義類都以C開頭;,類成員變量以m_為前綴,下劃線后是變量名等等。,MFC提供了構(gòu)造Windows應(yīng)用程序的框架,它不僅為 應(yīng)用程序建立標(biāo)準(zhǔn)的結(jié)構(gòu),生成一系列起動文件,還 提供標(biāo)準(zhǔn)的圖形用戶界面如菜單、工具欄、狀態(tài)條等 供開發(fā)人員在程序中補(bǔ)充完善,開發(fā)人員只需要完成 針對特定應(yīng)用的代碼。使用應(yīng)用程序框架的應(yīng)用程序 代碼小

48、,運(yùn)行速度快,它提供的工具也降低了編碼的 難度。,3.1.4.應(yīng)用程序框架介紹,MFC包含大約200個類,但應(yīng)用程序框架只建立在 少數(shù)的幾個類之上并用到幾個VC工具。MFC中有些類 是為了配合另外一些類而設(shè)計的,但MFC應(yīng)用程序并 沒有一個固定的結(jié)構(gòu),可以以不同的組合方式構(gòu)造 出不同的應(yīng)用程序方案。實際上影響應(yīng)用程序框架的有5個核心類:CWinApp,Cdocument,CView,CFrameWnd,CDocTemplate。,數(shù)據(jù)儲存在文檔類中,數(shù)據(jù)顯示由視圖負(fù)責(zé)。視圖是 程序窗口的客戶區(qū),用戶通過視圖與程序交互,框架窗 口是客戶區(qū)的框架;一個文檔可以對應(yīng)多個不同視圖; 而一個視圖一般只對

49、應(yīng)一個文檔。當(dāng)文檔數(shù)據(jù)發(fā)生變化 時,視圖顯示的狀態(tài)也會隨之變化;對于多個視圖的情 況,基于同一文檔的多個視圖的顯示同步變化。,1.文檔-視圖結(jié)構(gòu),-提供了一種連續(xù)的處理數(shù)據(jù)方式,其目的是 使應(yīng)用程序的數(shù)據(jù)本身與數(shù)據(jù)的顯示分開處 理。,視圖對象,下圖顯示文檔與視圖及框架之間的關(guān)系 :,2.單文檔界面應(yīng)用,單文檔界面應(yīng)用程序簡稱SDI(Single Document Interface),只允許一個框架窗口存在,每次只能創(chuàng)建和擁有一個文檔對象,也只允許打開一個文檔。,3.多文檔界面應(yīng)用,簡稱MDI(Multiple Document Interface), 允許有多個文檔類、視圖類和多個文檔模板

50、CMultiDocTemplate(建立多種文檔-視圖-子框架關(guān)系) 存在,程序執(zhí)行時允許打開多個MDI子框架窗口,擁有 各自的文檔和視圖對象。,在打開的多個子窗口中,只有一個活動窗口,應(yīng)用程序菜單和工具欄的所有的命令都是針對活動窗口的。 MDI中的主框架窗口是CMDIFrameWnd派生類,比SDI應(yīng)用多一個子框架窗口,是CMDIChildWnd派生類,其它類及其功能與SDI類似。,4.非文檔/視圖結(jié)構(gòu)應(yīng)用,-可以充分發(fā)揮應(yīng)用程序框架和MFC的優(yōu)勢, 是MFC應(yīng)用程序的核心,但它的使用也要付出運(yùn)行效率 和代碼增大的代價。,非文檔/視圖結(jié)構(gòu)對應(yīng)用程序來說并不是必不可少的,有兩種常見的非文檔/視

51、圖結(jié)構(gòu)應(yīng)用:,(1).基于對話框的應(yīng)用,它包含一個CWinApp對象和 一個模態(tài)對話框,對話框負(fù)責(zé)數(shù)據(jù)的存儲和顯示 。,(2).SDI或MDI應(yīng)用,都可以不包含文檔對象,SDI包 含一個CWinApp對象,一個框架窗口對象和一個 從CWnd派生的視圖對象,視圖對象負(fù)責(zé)數(shù)據(jù)的顯 示,MDI應(yīng)用還包括一個子框架窗口。,5.MFC應(yīng)用程序創(chuàng)建,如下圖所示,創(chuàng)建MFC應(yīng)用程序與第二章介紹的Windows程序設(shè)計類似,首先由應(yīng)用程序向?qū)?chuàng)建工程,然后利用集成開發(fā)環(huán)境的各種工具,編輯源文件、資源文件,利用類向?qū)Ы⑾⒂成潢P(guān)系等,然后經(jīng)過編譯、鏈接生成可執(zhí)行文件。,MFC應(yīng)用程序開發(fā)過程,向?qū)ь?集成開發(fā)

52、環(huán)境,應(yīng)用程序向?qū)?資源編輯器,Create,.DEF,.CPP .H,.DSW .DSP,.ICC,.RC,.BMP,源文件,資源文件,編譯,.obj,Build,資源編譯,.res,應(yīng)用程序,6.最簡單的MFC應(yīng)用程序示例,實際上,對于一個MFC應(yīng)用程序來說,只有CWinApp 的派生對象是必不可少的,其它類均可視情況進(jìn)行取舍。 例3.0,顯示一個消息框。 (1).創(chuàng)建工程,工程類型選擇Win32 Application, 工程名為Ex3_0;,(2).創(chuàng)建C+源文件,文件名Ex3_0.cpp,內(nèi)容如下:,#include class CEx3_0App: public CWinApp p

53、ublic: virtual BOOL InitInstance() MessageBox(NULL,”SimplistMFC Application.”,”Ex3_0”,MB_OK); return TRUE; ; CEx3_0App theApp; /全局變量,代表應(yīng)用程序本身。,(3).設(shè)置使用MFC。 選擇Project|Settings菜單項,選中General頁面, 在Microsoft Foundation Classes組合框中 選擇Use MFC in a shared DLL。 (4).編譯生成并運(yùn)行此工程,結(jié)果顯示一個消息框,如 下圖:,最簡單MFC應(yīng)用示例,CWinAp

54、p:InitInstance()虛函數(shù)完成應(yīng)用程序的初始化工作,派生的應(yīng)用程序類都要重載此函數(shù)進(jìn)行初始化,如完成主框架窗口的構(gòu)造,窗口定義顯示等工作。,3.2.MFC 程序設(shè)計,3.2.1.程序的執(zhí)行過程,下圖是MFC應(yīng)用程序的執(zhí)行過程示意。,1.構(gòu)造全局對象CWinApp派生類對象;,2.運(yùn)行由應(yīng)用程序框架提供的WinMain函數(shù);,3.在WinMain中,通過afxGetApp獲得全局對象的指針 pApp,調(diào)用全局函數(shù)AfxWinInit,為CWinApp的成員 變量m_hInstance, m_hPrevInstance, m_lpCmdLine, m_nCmdShow賦初值; 然后調(diào)用

55、pApp-InitApplication,這是CWinApp的虛 函數(shù),一般不需要改寫; 調(diào)用 pApp-InitInstance,每個程序都必需改寫這個 函數(shù),進(jìn)行應(yīng)用程序初始化;,MFC應(yīng)用程序的執(zhí)行過程,4.在InitInstance函數(shù)中,先用new構(gòu)造一個 CFrameWnd派生類對象,其構(gòu)造函數(shù)又調(diào)用Create, 創(chuàng)建主窗口,MFC依此自動為應(yīng)用程序注冊窗口類; 然后調(diào)用ShowWindow顯示窗口,調(diào)用UpdateWindow, 發(fā)出WM_PAINT消;,5.回到WinMain中,調(diào)用pApp-Run,進(jìn)入消息循環(huán), 通過API函數(shù)GetMessage獲得消息,Translat

56、eMessage 處理消息,DispatchMessage派送消息到 CWnd:DefWindowProc,DefWindowProc按照消息映射表的定義將消息分發(fā)到各相應(yīng)消息處理函數(shù); 如消息隊列為空,則Run調(diào)用CWinApp: OnIdle進(jìn)行空 閑處理,重載OnIdle可以去處理后臺程序(低優(yōu)先級);,6.若用戶選擇菜單File/Close,則程序收到WM_COLSE消息,調(diào)用:DestroyWindow發(fā)出WM_DESTROY消息,然后調(diào)PostQuitMessage,發(fā)出WM_QUIT消息,此時Run會結(jié)束 其內(nèi)部消息循環(huán),調(diào)用ExitInstance;,7.最后,返回WinMain,執(zhí)行WinTerm,結(jié)束程序運(yùn)行。,下面就MFC程序再作幾點(diǎn)解釋:,(1).每個MFC應(yīng)用都有stdafx.h頭文件,由應(yīng)用程 序向?qū)ё詣由桑?(2).每個MFC應(yīng)用都應(yīng)包含頭文件afxwin.h,其內(nèi)部 又包含了其他頭文件。,(3).每一個MFC應(yīng)用程序都包含唯一的CWinApp對象,代表應(yīng)用程序本身。,(4).MFC應(yīng)用程序中看不到WinMain入口函數(shù),它被 封裝在應(yīng)用程序框架里,運(yùn)行時自動調(diào)用;,3.2.2.MFC消息映射,MFC引入消息映射(Message Map)機(jī)制,簡化了但增強(qiáng)了消息處

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論