消息與消息隊(duì)列_第1頁
消息與消息隊(duì)列_第2頁
消息與消息隊(duì)列_第3頁
消息與消息隊(duì)列_第4頁
消息與消息隊(duì)列_第5頁
已閱讀5頁,還剩12頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、消息與消息隊(duì)列口減小字體增大字體作者:不詳來源:本站整理發(fā)布時(shí)間:2005-7-21 14:59:32基于windows的應(yīng)用程序是事件驅(qū)動的。它們不進(jìn)行明確的函數(shù)調(diào)用(比如調(diào)用 C運(yùn)行庫)來獲得輸入。取而代之的是他們等待操作系統(tǒng)將輸入傳遞給他們。操作系統(tǒng)傳遞所有的輸入給各種應(yīng)用程序。每個(gè)window有一個(gè)函數(shù)叫做窗口過 程,只要有輸入操作系統(tǒng)就調(diào)用他們。窗口過程處理輸入后,將控制返回給操作 系統(tǒng)。詳細(xì)資料請看窗口過程。Microsoft? Windows? XP:如果最頂層(top-level)的窗口停止響應(yīng)幾秒鐘,系統(tǒng) 將認(rèn)為窗口被掛起。這種情況下,系統(tǒng)將隱藏這個(gè)窗口并用一個(gè)ghost w

2、indow 在相同z坐標(biāo)上,相同的大小,相同的可視屬性來取代他。以允許用戶移動窗口, 改變窗口大小,關(guān)閉窗口。然而,僅有這些行為是可操作的因?yàn)閼?yīng)用程序已掛起。 在Debugger模式下,系統(tǒng)不產(chǎn)生ghost窗口。This section discusses the following topics:Windows MessagesMessage TypesMessage RoutingMessage HandlingMessage FilteringPosting and Sending MessagesMessage DeadlocksBroadcasting MessagesQuery M

3、essagesWindows Messages系統(tǒng)以messages的形式將輸入傳遞給窗口過程。消息可以被系統(tǒng)和應(yīng)用程序產(chǎn) 生。系統(tǒng)產(chǎn)生消息當(dāng)每一次輸入事件發(fā)生,如當(dāng)用戶敲鍵盤,移鼠標(biāo),或者單擊 滾動條。系統(tǒng)也用消息來響應(yīng)由于應(yīng)用程序引起的系統(tǒng)變化。如應(yīng)用程序改變系 統(tǒng)字體資源或者改變它的一個(gè)窗口。應(yīng)用程序產(chǎn)生消息來讓他的窗口執(zhí)行一些任 務(wù)或者與其他應(yīng)用程序的窗口通訊。系統(tǒng)發(fā)送消息給窗口過程并傳遞4個(gè)參數(shù),windows句柄,消息標(biāo)識符,2個(gè)消 息參數(shù)。系統(tǒng)使用窗體句柄來決定那個(gè)窗口過程來接受消息。消息標(biāo)識符以常量命名指出消息的含義。當(dāng)窗口過程接收到消息,使用消息標(biāo)識 符決定如何處理消息。例如

4、、WM_PAINT告訴窗口過程窗體客戶區(qū)被改變了需要重繪。消息參數(shù)指定被窗口過程使用的數(shù)據(jù)和數(shù)據(jù)的位置。其含義和值取決于消息類 型。消息參數(shù)可以包含一個(gè)整數(shù),標(biāo)志位,一個(gè)指針等。當(dāng)消息不使用消息參 數(shù)時(shí),他們被設(shè)置位NULL。一個(gè)Window窗口過程必須根據(jù)消息標(biāo)識符來決定如 何解釋消息參數(shù)。Message TypesThis section describes the two types of messages:System-Defined MessagesApplication-Defined MessagesSystem-Defined Messages當(dāng)系統(tǒng)和應(yīng)用程序通訊時(shí),系統(tǒng)pos

5、t和send系統(tǒng)定義消息。他使用消息來控制 應(yīng)用程序的操作,提供輸入和其他信息讓應(yīng)用程序處理。應(yīng)用程序也可以post 或者send系統(tǒng)定義消息。每一個(gè)系統(tǒng)定義消息由一個(gè)唯一的標(biāo)識符與一致的常量以聲明消息的含義。例如 WM_PAINT要求窗口繪制它的內(nèi)容。符號常量指定系統(tǒng)定義消息屬于的類別,常量的前綴指定處理解釋消息的窗體的 類型。以下使一些前綴和他們相關(guān)的消息類別。Prefix Message categoryABM Application desktop toolbarBM Button controlCB Combo box controlCBEM Extended combo box c

6、ontrolCDM Common dialog boxDBT DeviceDL Drag list boxDM Default push button controlDTM Date and time picker controlEM Edit controlHDM Header controlHKM Hot key controlIPM IP address controlLB List box controlLVM List view controlMCM Month calendar controlPBM Progress barPGM Pager controlPSM Property

7、 sheetRB Rebar controlSB Status bar windowSBM Scroll bar controlSTM Static controlTB ToolbarTBM TrackbarTCM Tab controlTTM Tooltip controlTVM Tree-view controlUDM Up-down controlWM General window通用窗體消息覆蓋了很大一個(gè)信息和請求的范圍,包括鼠標(biāo)鍵盤消息,菜單對 話框的輸入,窗體產(chǎn)生與管理,動態(tài)數(shù)據(jù)交換(DDE).Application-Defined Messages應(yīng)用程序可以產(chǎn)生自己用的消息或者

8、與其他進(jìn)程中窗體通訊。如果應(yīng)用程序產(chǎn)生 自己的消息,窗口過程接受并且必須提供合適的處理。系統(tǒng)保留消息標(biāo)識符的值在0 x0000在0 x03ff(WM_USER-1)范圍。這些值被系統(tǒng) 定義消息使用。應(yīng)用程序不能使用這些值給自己的消息。private window classes 用 0 x0400(WM_USER)到 0 x7fff 消息標(biāo)識符 If your application is marked version 4.0, you can use message-identifier values in the range 0 x8000 (WM_APP) through 0 xBFFF

9、 for private messages.系統(tǒng)使用RegisterWindowMessage來注冊消息,返回一個(gè)消息標(biāo)識符范圍在 0XC000到0XFFFF,使用這個(gè)函數(shù)來保證整個(gè)系統(tǒng)范圍內(nèi)是唯一的Message Routing系統(tǒng)有兩個(gè)方法將消息傳遞到窗口過程。Post 一個(gè)消息到先進(jìn)先出的消息隊(duì)列。 系統(tǒng)定義的臨時(shí)內(nèi)存對象。和直接send消息到窗口過程。被發(fā)送到消息隊(duì)列的消息稱做入隊(duì)消息,主要是由鼠標(biāo)鍵盤輸入,例如WM_MOUSEMOVE, WM_LBUTTONDOWN, WM_KEYDOWN, and WM_CHAR messages 還包括 定時(shí)器,刷新,退出:WM_TIMER, W

10、M_PAINT, and WM_QUIT。其他直接發(fā)送到窗 口過程的消息被稱為非入隊(duì)消息。Queued Messages系統(tǒng)可以顯示任何數(shù)量的窗體同一時(shí)間。為了傳遞鼠標(biāo)鍵盤消息到合適的窗口, 系統(tǒng)使用消息隊(duì)列。系統(tǒng)維護(hù)一個(gè)系統(tǒng)消息隊(duì)列和每一個(gè)GUI線程的消息隊(duì)列,為避免給non-GUI現(xiàn) 成創(chuàng)建消息隊(duì)列,所有線程產(chǎn)生時(shí)并沒有消息隊(duì)列。僅當(dāng)線程第一次調(diào)用GDI 函數(shù)時(shí),系統(tǒng)給線程創(chuàng)建一個(gè)消息隊(duì)列。只要用戶移動鼠標(biāo),點(diǎn)擊鼠標(biāo),敲鍵, 驅(qū)動程序?qū)⑵滢D(zhuǎn)換為消息將他們放在系統(tǒng)消息隊(duì)列中。系統(tǒng)將他們從系統(tǒng)消息隊(duì) 列中移走,檢查他們的目標(biāo)窗口,然后將他們發(fā)送到創(chuàng)建目標(biāo)窗口的線程的消息 隊(duì)列。線程消息隊(duì)列接收

11、由這個(gè)線程創(chuàng)建的所有窗口的鼠標(biāo)鍵盤消息。線程刪除 消息系統(tǒng)調(diào)用窗口過程進(jìn)行處理。WM_PAINT是一個(gè)例外,系統(tǒng)總是將消息Post在消息隊(duì)列的末尾。這樣保證窗口 以先進(jìn)先出的順序接受消息。然而,僅當(dāng)沒有其他消息時(shí)WM_PAINT才被傳遞窗 口過程。同一個(gè)窗口的多個(gè)WM_PAINT被合并成一個(gè)WM_PAINT消息,合并所有 的無效區(qū)域到一個(gè)無效區(qū)域。合并WM_PAIN減少了刷新窗口的消息與消息隊(duì)列口減小字體增大字體作者:不詳來源:本站整理發(fā)布時(shí)間:2005-7-21 14:59:32新次數(shù)。系統(tǒng)通過填充MSG結(jié)構(gòu)并將它復(fù)制到消息隊(duì)列來發(fā)送消息到線程隊(duì)列。MSG結(jié)構(gòu)包括:窗 口句柄,消息標(biāo)識符,兩

12、個(gè)消息參數(shù)。消息被posted的時(shí)間,和鼠標(biāo)的位置。線程可以使 用PostMessage和PostThreadMessage來給發(fā)送消息到自己消息隊(duì)列或者另一個(gè)線成的消息隊(duì)列。應(yīng)用程序可以使用GetMessage從消息隊(duì)列刪除消息??梢允褂肞eekMessage來檢查一個(gè)消 息而不刪除它。這個(gè)函數(shù)將消息隊(duì)列的消息填充到MSG結(jié)構(gòu)。在從消息隊(duì)列刪除了一個(gè)消息,應(yīng)用程序可以使用DispatchMessage使系統(tǒng)將消息發(fā)送到窗 口過程來處理。DispatchMessage擁有一個(gè)指向由GetMessage或者PeekMessage填充的MSG 結(jié)構(gòu)的指針,傳遞窗口句柄,消息標(biāo)識符,消息參數(shù)給窗口過

13、程。但它并不傳遞消息發(fā)送的 時(shí)間和鼠標(biāo)的位置,應(yīng)用程序可以通過GetMessageTime和GetMessagePos來得到這些信息。線程可以使用WaitMessage將控制交給其他線程當(dāng)消息隊(duì)列中沒有他的消息隊(duì)烈時(shí),這個(gè)函 數(shù)掛起線程,并不返回,直到新的消息放置于消息隊(duì)列中。你可以調(diào)用SetMessageExtraInfo函數(shù)來關(guān)聯(lián)一個(gè)值到當(dāng)前線程的消息隊(duì)列。調(diào)用GetMessageExtraInfo來得到這個(gè)與最后一次通過GetMessage或者PeekMessaage獲得的消息 關(guān)聯(lián)得值。Nonqueued Messages非入隊(duì)消息即直接發(fā)送到窗口過程的消息,繞過系統(tǒng)隊(duì)列和線程消息隊(duì)列

14、。系統(tǒng)發(fā)送非入隊(duì) 消息通知一個(gè)窗口事件,例如,當(dāng)用戶激活一個(gè)新的應(yīng)用程序窗口,系統(tǒng)發(fā)送WM_ACTIVATE, WM_SETFOCUS, and WM_SETCURSOR。這些消息通知窗口它被激活了, 鍵盤輸入被直接傳遞到窗口,鼠標(biāo)在當(dāng)前窗口內(nèi)移動。非入隊(duì)消息也可以由當(dāng)應(yīng)用程序調(diào) 用系統(tǒng)函數(shù)產(chǎn)生。例如,當(dāng)程序調(diào)用SetWindowPos系統(tǒng)發(fā)送WM_WINDOWPOSCHANGED 消息。一些函數(shù)也發(fā)送非入隊(duì)消息如 BroadcastSystemMessage, BroadcastSystemMessageEx, SendMessage, SendMessageTimeout, and Sen

15、dNotifyMessage.Message Handling應(yīng)用程序必須移除和處理被post到消息隊(duì)列的消息。單線程應(yīng)用程序通常在WinMain使用 消息循環(huán)來移除和分發(fā)消息到何時(shí)窗口過程來處理。多線程應(yīng)用程序可以在每一個(gè)創(chuàng)建窗口 的線程中中包含消息循環(huán)。Message LoopA simple message loop consists of one function call to each of these three functions: GetMessage, TranslateMessage, and DispatchMessage. Note that if there is

16、an error, GetMessage returns -1 -thus the need for the special testing.Show ExampleMSG msg;BOOL bRet;while( (bRet = GetMessage( &msg, NULL, 0, 0 ) != 0)if (bRet = -1)/ handle the error and possibly exitelseTranslateMessage(&msg);DispatchMessage(&msg);GetMessage函數(shù)從消息隊(duì)列獲得一個(gè)消息并將它復(fù)制到MSG結(jié)構(gòu)。他返回一個(gè)非0值, 除非遇到

17、WM_QUIT消息。否則它返回0然后結(jié)束循環(huán)。In a single-threaded application, ending the message loop is often the first step in closing the application.應(yīng)用程序可以使用 PostQuitMessage來結(jié)束自己的消息循環(huán)。通常在主窗口的WM_DESTROY消息中調(diào)用。如果你將一個(gè)窗口句柄作為第二個(gè)參數(shù)傳入GetMessage,那么只有指定窗口的的消息可以 從隊(duì)列中獲得。GetMessage也可以從消息隊(duì)列中過濾消息只接受消息隊(duì)列中落在范圍內(nèi)的 消息。詳細(xì)見消息過濾。一個(gè)線程循環(huán)必須包

18、括TranslateMessage如果線程接受鍵盤的字 符輸入。每一次用戶按鍵系統(tǒng)產(chǎn)生虛擬鍵消息,一個(gè)虛擬鍵消息包含虛擬鍵用來標(biāo)志那個(gè)鍵 被按下,并不是他的字符值,要獲得這個(gè)值消息循環(huán)必須調(diào)用TranslateMessage,用于將虛 擬鍵轉(zhuǎn)換為字符消息WM_CHAR然后將它放回應(yīng)用程序消息隊(duì)列。通過將它轉(zhuǎn)發(fā)到窗口過 程,字符消息被刪除。DispatchMessage函數(shù)分發(fā)消息到MSG結(jié)構(gòu)中的窗口句柄關(guān)聯(lián)的窗口過程。如果窗口句柄 是HWND_TOPMOST,DispatchMessage分發(fā)消息到系統(tǒng)中的所有的top-level窗口的窗口過 程。如果句柄是NULL,DispatchMessa

19、ge不做任何事。應(yīng)用程序得主線程在初始化,創(chuàng)建至少一個(gè)窗口后啟動它的消息循環(huán),一旦啟動消息循環(huán)持 續(xù)從線程隊(duì)列中獲得消息,然后分發(fā)他們到合適的窗口。消息循環(huán)在通過GetMessage得到 WM_QUIT并將他從隊(duì)列中刪除后結(jié)束。一個(gè)消息都列僅需要一個(gè)消息循環(huán),即使程序包含很多窗口。DispatchMessage總是分發(fā)消 息到合適的窗口,這是因?yàn)镸SG結(jié)構(gòu)包含消息所屬的窗口的句柄。你可以用各種方式修改消息循環(huán)。例如,從消息隊(duì)列獲得消息消息但不把他們分發(fā)到窗口中 去。當(dāng)應(yīng)用程序發(fā)送一個(gè)消息但不指定窗口時(shí)是有用的。你可以用GetMessage獲得一個(gè)特 定的消息,而保留其他消息在消息隊(duì)列。當(dāng)你需要

20、改變先進(jìn)先出的順序時(shí)是有用的。應(yīng)用程序使用加速鍵必須將鍵盤消息轉(zhuǎn)換為WM_COMMAND消息。所以消息循環(huán)必須包 括TranslateAccelerator函數(shù)。詳細(xì)信息參見加速鍵。如果線程使用非模態(tài)對話框,消息循環(huán)必須包括IsDialogMessage以使非模態(tài)對話框獲得鍵 盤輸入。Window Procedure窗口過程是一個(gè)用于處理所有發(fā)送到這個(gè)窗口的消息的函數(shù)。任何一個(gè)窗口類都有一個(gè)窗口 過程。同一個(gè)類的窗口使用同樣的窗口過程來響應(yīng)消息。系統(tǒng)發(fā)送消息給窗口過程將消息數(shù)據(jù)作為參數(shù)傳遞給他,窗口過程使用參數(shù)產(chǎn)生合適行為。一個(gè)窗口過程通常不忽略消息,如果他不處理,它會將消息傳回到執(zhí)行默認(rèn)的處

21、理。窗口過 程通過調(diào)用DefWindowProc來做這個(gè)處理。窗口過程必須return 一個(gè)值作為它的消息處理 結(jié)果。大多數(shù)窗口只處理小部分消息和將其他的通過DefWindowProc傳遞給系統(tǒng)做默認(rèn)的 處理。因?yàn)榇翱谶^程是同一個(gè)類的窗口共享的,它可以為不同的窗口處理消息。通過檢查消息中的 窗口句柄來找到被消息影響的窗口。詳細(xì)信息請看Window Procedures oMessage Filtering應(yīng)用程序可以從消息隊(duì)列選擇特定的消息。使用GetMessage或者PeekMessage并指定一個(gè) 消息過濾器。這個(gè)過濾器是一個(gè)消息標(biāo)識符的范圍或者是一個(gè)窗體句柄,或者兩者同時(shí)指定。 GetM

22、essage和PeekMessage使用過濾器來選擇從消息隊(duì)列中獲得那些消息。當(dāng)應(yīng)用程消息與消息隊(duì)列口減小字體+增大字體作者:不詳來源:本站整理發(fā)布時(shí)間:2005-7-21 14:59:32 新序要查找一個(gè)后入消息隊(duì)列的消息是很有用。一個(gè)應(yīng)用程序過濾消息時(shí)必須保證符合過濾條件的消息能被發(fā)送。例如應(yīng)用程序在窗口中過 濾WM_CHAR并不能得到鍵盤輸入,GetMessage并不返回。這將掛起應(yīng)用程序。Posting and Sending Messages應(yīng)用程序可以post和send消息,通過將消息復(fù)制到消息隊(duì)列即post消息,send消息將消息 數(shù)據(jù)作為參數(shù)直接傳遞到窗口過程??梢允褂?Pos

23、tMessage 來 post 消息,SendMessage, BroadcastSystemMessage,SendMessageCallback, SendMessageTimeout, SendNotifyMessage, or SendDlgItemMessage 來send消息。Posting Messages應(yīng)用程序post消息通知指定窗體執(zhí)行任務(wù)。PostMessage可以創(chuàng)建MSG結(jié)構(gòu)并將它Copy 到消息隊(duì)列。消息循環(huán)最終捕獲消息并分發(fā)到合適的窗口過程。給PostMessage傳遞一個(gè)NULL句柄不指定哪一個(gè)窗口,這個(gè)消息就被發(fā)送到當(dāng)前線程消息 隊(duì)列,應(yīng)用程序必須在消息處理中

24、處理這個(gè)消息。這是為整個(gè)應(yīng)用程序發(fā)送消息的一個(gè)方法。偶爾你可以使用HWND_TOPMOST這個(gè)參數(shù)作為句柄參數(shù)向所有的top-level窗口發(fā)送消 息。當(dāng)消息隊(duì)列滿的時(shí)候PostMessage并不發(fā)送消息,應(yīng)用程序需要檢查PostMessage函數(shù)的返回 值來確定消息是否被發(fā)送,或者沒有需要重發(fā)。通過Send消息來通知窗口過程立即執(zhí)行任務(wù)。SendMessage將消息發(fā)送給指定窗口的窗口 過程。函數(shù)將等待窗口過程處理完才返回一個(gè)消息結(jié)果。父窗口和子窗口通常使用Send消 息來互相通訊。例如,一個(gè)父窗口擁有以一個(gè)文本框作為它的子窗口,它可以通過發(fā)送消息 到子窗口來給文本框設(shè)置文字。子窗口也可將文

25、字被用戶改變的消息發(fā)送給父窗口。SendMessageCallback也將消息發(fā)送給指定窗口的窗口過程,但是他立即返回。在窗口過程 處理完消息后,系統(tǒng)調(diào)用指定的回調(diào)函數(shù),回調(diào)函數(shù)的詳細(xì)資料參見SendAsyncProc偶爾,你可以發(fā)送消息系統(tǒng)中到所有的top-level窗口,例如,應(yīng)用程序改變了系統(tǒng)時(shí)間。它必須以HWND_TOPMOST作為句柄參數(shù)發(fā)送一個(gè)WM_TIMECHANGE消息通知所有的 top-level 窗口,你也可以將 lpdwRecipients 指定為 BSM_APPLICATIONS 用BroadcastSystemMessage函數(shù)向所有應(yīng)用程序廣播。可以使用InSend

26、Message或者InSendMessageEx函數(shù),窗口過程可以判斷它處理的消息是否 是由其他線程調(diào)用 SendMessage 發(fā)送過來的。This capability is useful when message processing depends on the origin of the message.Message Deadlocks一個(gè)線程可以調(diào)用SendMessage想其他線程發(fā)送消息,這個(gè)線程不能繼續(xù)執(zhí)行直到獲得消息得窗口過程返回。如果接受消息的線程處理消息時(shí)yields控制,發(fā)送線程的消息將永遠(yuǎn)得不 到執(zhí)行,因?yàn)樗诘却齋endMessage返回。如果接受線程和發(fā)送線成語

27、同一個(gè)消息隊(duì)列聯(lián)系 起來,它可能導(dǎo)致消息死鎖。Note that the receiving thread need not yield control explicitly; calling any of the following functions can cause a thread to yield control implicitly.接受線程不需要明確yield控制,下面任何一個(gè)函數(shù)回導(dǎo)致一個(gè)線程明確yield控制。DialogBoxDialogBoxIndirectDialogBoxIndirectParamDialogBoxParamGetMessageMessageBoxP

28、eekMessageSendMessage為了避免潛在的死鎖,可以使用SendNotifyMessage或者SendMessageTimeout,否則窗口 過程,將用InSendMessage或者InSendMessageEx判斷消息是否由另一個(gè)線程發(fā)送過來。當(dāng) 調(diào)用前面任何一個(gè)函數(shù)窗口過程將首先調(diào)用InSendMessage或者InSendMessagEx,如果函數(shù) 返回true窗口過程必須在引起線程yeild控制前調(diào)用ReplyMessage。每一個(gè)消息包括消息標(biāo)識符和兩個(gè)參數(shù),wParam和IParam,消息標(biāo)識符是唯一的代表這個(gè) 消息的含義。參數(shù)提供與消息相關(guān)的額外的信息,但是wParam參數(shù)通常是一個(gè)類型值提供 更多的消息信息。消息廣播是簡單的將消息發(fā)送到系統(tǒng)中的多個(gè)接收者。使用BroadcastSystemMessage函數(shù)來 廣播消息,你必須指定一個(gè)或者多個(gè)接收者類型,這些類型可以是applications, installable drivers, network drivers, and system-level device drivers。系統(tǒng)將消息發(fā)送給指定類型的所有成 員。系統(tǒng)廣播消息來響應(yīng)系統(tǒng)設(shè)備驅(qū)動程序或者組件的變化。驅(qū)動程序或相關(guān)組件廣播消息給

溫馨提示

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

評論

0/150

提交評論