久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

RichEdit控件 SDK 參考手冊

 獨(dú)孤求財 2012-02-01

RichEdit控件 SDK 參考手冊

分類: Delphi 748人閱讀 評論(1) 收藏 舉報

RichEdit控件 SDK 參考手冊

 

摘要: 本文對Rich Edit控件底層消息機(jī)制進(jìn)行了講解,,以期讀者對Windows平臺下的Rich Edit控件有一個更深入的認(rèn)識,同時對于使用Win32 SDK進(jìn)行開發(fā)的人員具有一定參考價值,。因?yàn)槲恼碌某踔允且I(lǐng)VB程序員通過Win32 API調(diào)用來擴(kuò)展VB下的Rich Edit控件的功能,,所以對于每個消息的詳細(xì)說明和注意事項(xiàng)未作過多說明,,感興趣的朋友可以參考Visual Studio下的MSDN Library。

關(guān)鍵字:Rich Edit Control,、RTF,、SDK,、MSDN。

一,、引言
Rich Edit控件是一個可用于輸入,、編輯、格式化,、打印和保存文本的窗體,。這些文本可以設(shè)置字符和段落格式,并且可以包含嵌入的COM對象,。Rich Edit控件提供格式化文本的編程接口,。不過,應(yīng)用程序必須實(shí)現(xiàn)這些用戶接口組件,,以便用戶可以進(jìn)行格式化操作,。

 Rich Edit控件幾乎支持所有用于多行Edit控件的消息和通知。因此,,已經(jīng)使用了Edit控件的程序可以很容易的改為Rich Edit控件,。額外的消息和通知使得應(yīng)用程序可以訪問Rich Edit控件特有的功能。獲取更多關(guān)于Edit控件的信息,,請參閱Edit Controls,。

正如大家所熟知的,Windows控件是基礎(chǔ)窗口,,它處理那些控制窗口顯示和特征的消息,。而ActiveX控件是把那些消息變成屬性和方法的COM 容器。RichEdit Windows控件是Edit Windows控件的擴(kuò)展集,,TextBox ActiveX控件也是從它派生而來,。RichEdit能夠識別Edit消息并且加入了自己特有的消息。你可以在Win32幫助文件中認(rèn)出Edit和RichEdit的消息常數(shù),,因?yàn)樗麄兙捎肊M_作為前綴。

ActiveX RichTextBox控件將絕大多數(shù)的這種消息映射為其屬性,。例如,,EM_LIMITTEXT與MaxLength屬性相對應(yīng)。但是你同時會注意到一些感興趣的消息并沒有與之對應(yīng)的RichTextBox屬性,。為什么呢,?

ActiveX控件為最通用的特性提供方法和屬性,更具體講,,是提供給VB設(shè)計者最感興趣的特性,。設(shè)計者們似乎喜歡每個新版本里更多的特征。 例如,,TextBox 和RichTextBox控件現(xiàn)在具備Locked屬性,。在舊版本的VB中你不得不通過EM_SETREADONLY消息來模擬,。但是,還有許多其他隱藏的或者不是很明顯的特性在ActiveX控件中尚未提供,。為了使用這些特性,,我們就必須對Rich Edit控件的底層消息機(jī)制進(jìn)行較深入的了解。

二,、關(guān)于Rich Edit控件
Rich Edit控件的最初規(guī)范為1.0版,。目前規(guī)范為2.0版。(譯者注:目前最新版本為4.1版本?。┰趧?chuàng)建一個Rich Edit控件之前,,你應(yīng)該調(diào)用LoadLibrary函數(shù)來確認(rèn)安裝的Rich Edit控件的版本。下表顯示了不同版本與其DLL間的對應(yīng)關(guān)系,。

Rich Edit 版本
 DLL名稱
 版本號
 
1.0
 RICHED32.DLL
   
2.0
 RICHED20.DLL
 低于5.30.23.1200
 
3.0
 RICHED20.DLL
 5.30.23.1200或更高
 
4.1
 Msftedit.dll
   

下表給出了不同版本W(wǎng)indows下與其包含的不同版本的Rich Edit對應(yīng)關(guān)系:

Windows XP SP1
 包含 Rich Edit 4.1, Rich Edit 3.0, 和一個 Rich Edit 1.0 仿真程序,。
 
Windows XP
 包含Rich Edit 3.0和一個 Rich Edit 1.0 仿真程序。
 
Windows Me
 包含Rich Edit 1.0和3.0,。
 
Windows 2000
 包含Rich Edit 3.0和一個 Rich Edit 1.0 仿真程序,。
 
Windows NT 4.0
 包含Rich Edit 1.0和2.0。
 
Windows 98
 包含Rich Edit 1.0和2.0,。
 
Windows 95
 只包含Rich Edit 1.0,。不過,Riched20.DLL與Windows 95系統(tǒng)兼容,,所以可以在正確安裝后使用,。
 

2.1    Rich Edit 2.0
Rich Edit 2.0包含幾個新特性,比如支持Unicode和遠(yuǎn)東語言,,多級撤消,,以及大量的增強(qiáng)用戶接口。

Rich Edit 2.0采用與Rich Edit 1.0一致的Win32函數(shù),,結(jié)構(gòu)和消息,,極少例外。他們的區(qū)別在于:

Rich Edit 1.0窗體類的名字叫"RichEdit",。Rich Edit 2.0同時具有ANSI和Unicode窗體類,,"RichEdit20A"和"RichEdit20W"分別表示對應(yīng)的Rich Edit窗體類,我們RichEdit.H文件定義的RICHEDIT_CLASS常數(shù)來區(qū)分,,而具體采用哪一個取決于UNICODE編譯標(biāo)志,。
在Rich Edit 2.0中,如果你創(chuàng)建一個Unicode控件,,只需在任何發(fā)往控件的Window消息中給出Unicode數(shù)據(jù),。同樣的,如果創(chuàng)建了一個ANSI控件,只能發(fā)送ANSI或者DBCS數(shù)據(jù),。你可以使用IsWindowUnicode函數(shù)來判斷是否一個Rich Edit控件是Unicode的,。
Rich Edit 1.0 采用CRLF(回車符和換行符)字符組合表示段落符號。而RichEdit 2.0只采用一個回車符號('/r'),。
Rich Edit 2.0包含以下新的消息:
消息
 描述
 
EM_AUTOURLDETECT
 是否開啟/關(guān)閉自動URL檢測,。
 
EM_CANREDO
 判斷是否在Redo隊(duì)列中有一些動作。
 
EM_GETIMECOMPMODE
 獲取當(dāng)前輸入方式編輯(IME)模式,。
 
EM_GETLANGOPTIONS
 獲取IME和遠(yuǎn)東語言支持選項(xiàng),。
 
EM_GETREDONAME
 獲取Redo隊(duì)列中的下一動作的類型名稱。
 
EM_GETTEXTMODE
 獲取文本模式或者Undo級別,。
 
EM_GETUNDONAME
 獲取Undo隊(duì)列中的下一動作的類型名稱,。
 
EM_REDO
 重做Redo隊(duì)列中的下一動作。
 
EM_SETLANGOPTIONS
 設(shè)置IME和遠(yuǎn)東語言支持選項(xiàng),。
 
EM_SETTEXTMODE
 設(shè)置文本模式或者Undo級別,。
 
EM_SETUNDOLIMIT
 設(shè)置Undo隊(duì)列的最大動作數(shù)目。
 
EM_STOPGROUPTYPING
 終止當(dāng)前Undo動作的連續(xù)鍵入動作的組合,。
 

Rich Edit 2.0 包含以下新的結(jié)構(gòu):
消息
 描述
 
CHARFORMAT2
 包含字符格式信息,。
 
PARAFORMAT2
 包含段落格式屬性。
 

Rich Edit 2.0 不支持以下這些在亞洲語言版本的Rich Edit 1.0中支持的消息:
EM_CONVPOSITION
 
EM_GETIMECOLOR
 
EM_GETIMEOPTIONS
 
EM_GETPUNCTUATION
 
EM_GETWORDWRAPMODE
 
EM_SETIMECOLOR
 
EM_SETIMEOPTIONS
 
EM_SETPUNCTUATION
 
EM_SETWORDWRAPMODE
 

2.2     創(chuàng)建 Rich Edit 控件
可用通過CreateWindowEx函數(shù)中指定Rich Edit 窗體類來創(chuàng)建一個Rich Edit控件,。如果使用1.0版本(RICHED32.DLL),,窗體類參數(shù)應(yīng)該為"RichEdit"。如果采用2.0版本(RICHED20.DLL),,窗體類參數(shù)應(yīng)該為"RICHEDIT_CLASS",。

Rich Edit控件支持大部分的Edit控件采用的窗體樣式,同時也支持一些額外的樣式,。你如果希望控件中的文本支持不止一行的話就應(yīng)該給出ES_MULTILINE窗體樣式,。

2.3    文本格式
應(yīng)用程序可以通過給Rich Edit控件發(fā)送消息來格式化字符和段落以及獲取這些格式化信息。段落格式屬性包含對齊,、跳格,、縮進(jìn)和編號。對字符而言,,你可以指定字體,、尺寸、顏色以及如粗體,、斜體和保護(hù)等效果。

你可以采用EM_SETPARAFORMAT消息來應(yīng)用段落格式,。獲取當(dāng)前選中文本的段落格式屬性,,則采用EM_GETPARAFORMAT消息。PARAFORMAT結(jié)構(gòu)將會在這兩個消息中用到,,它用于描述段落格式屬性,。

你可以采用EM_SETCHARFORMAT消息來應(yīng)用字符格式,。獲取當(dāng)前選中文本的字符格式屬性,則采用EM_GETCHARFORMAT消息,。CHARFORMAT結(jié)構(gòu)將會在這兩個消息中用到,,它用于描述字符格式屬性。

你也可以采用EM_SETCHARFORMAT和EM_GETCHARFORMAT消息來設(shè)置和獲取默認(rèn)字體格式,,它將應(yīng)用于所有隨后插入的字符,。例如,應(yīng)用程序?qū)⒛J(rèn)字符格式設(shè)置為粗體,,則用戶隨后敲入的字符都將為粗體,。

只有在當(dāng)前選擇內(nèi)容為空的時候默認(rèn)字符格式才會被應(yīng)用到新插入的文本上。否則,,新的文本將假定沿用其所替換的文本的格式,。如果選擇內(nèi)容改變,則默認(rèn)字體格式將將采用該內(nèi)容的首字符的格式,。

保護(hù)(Protected)字符效果是唯一不改變其文本顯示的例子,。如果用戶試圖修改保護(hù)文本,Rich Edit控件將發(fā)送EN_PROTECTED通知到其父窗口,,讓其父窗體決定是否允許或者拒絕修改,。為了接收該通知,你必須使用EM_SETEVENTMASK消息來啟用它,。

前景色是一個字符屬性,,但是背景色是一個Rich Text控件屬性。要設(shè)置背景色,,請采用EM_SETBKGNDCOLOR消息,。

2.4    Rich Edit控件中的當(dāng)前選擇內(nèi)容
用戶可以在Rich Edit控件中通過鼠標(biāo)和鍵盤來選擇文本。當(dāng)前選擇內(nèi)容指的是選中字符的范圍,,或者表示沒有字符選中時的插入點(diǎn)位置,。應(yīng)用程序可以獲取選中內(nèi)容的相關(guān)信息,設(shè)置當(dāng)前選中內(nèi)容,,決定當(dāng)前選中內(nèi)容何時改變,,顯示或者隱藏當(dāng)前高亮顯示的選中內(nèi)容等。

確定Rich Edit控件中的當(dāng)前選中內(nèi)容,,采用EM_EXGETSEL消息,。設(shè)置當(dāng)前選擇區(qū)域,采用EM_EXSETSEL消息,。CHARRANGE結(jié)構(gòu)用于在這兩個消息中描述字符范圍,。獲取當(dāng)前選中內(nèi)容的相關(guān)信息,你可以采用EM_SELECTIONTYPE消息。

應(yīng)用程序可以通過處理EN_SELCHANGE通知來檢測當(dāng)前選中內(nèi)容何時被改變,。該通知通過SELCHANGE結(jié)構(gòu)給出新選中內(nèi)容的相關(guān)信息,。Rich Edit控件只有在你通過EM_SETEVENTMASK消息開啟它之后才會發(fā)送該通知。

默認(rèn)情況下,,Rich Edit控件在獲取和失去焦點(diǎn)時將開啟和隱藏選中文本的高亮顯示,。你可以通過EM_HIDESELECTION消息在任何時候開啟或者隱藏選中區(qū)域的高亮顯示。例如,,某個應(yīng)用程序可能提供一個查找對話框用于在Rich Edit控件中查找文本,,這種情況下就必須使用EM_HIDESELECTION消息來保持選中文本的高亮顯示。

與Edit控件一樣,,你可以使用ES_NOHIDESEL窗體樣式來防止Rich Edit控件在失去焦點(diǎn)時隱藏選中區(qū)域的高亮顯示,。你也可以在Rich Edit控件創(chuàng)建之后使用EM_HIDESELECTION消息來改變窗體的ES_NOHIDESEL樣式。

 獲取和設(shè)置當(dāng)前選中內(nèi)容使用EM_GETSEL和EM_SETSEL Edit控件消息,,而非EM_EXGETSEL和EM_EXSETSEL消息,。EM_GETSEL消息將兩個16位字符索引壓縮為它的32位返回值,因此,,僅僅適用于選中區(qū)域的前64K字節(jié),。然而,一個Rich Edit控件不可能包含超過32K字節(jié)的文本,,除非你使用EM_EXLIMITTEXT消息擴(kuò)展了這個限制,。對于選中文本中超過前64K字節(jié)的文本,EM_GETSEL消息將返回-1,。

2.5    Rich Edit 文本操作
應(yīng)用程序可以發(fā)送消息來獲取或者查找Rich Edit控件中的文本,。你既可以獲取選中區(qū)域的文本也可以獲取給定范圍的文本。

獲取Rich Edit控件中的選中文本,,使用EM_GETSELTEXT消息,。文本將被拷貝到指定字符數(shù)組中。你必須確保數(shù)組大小足以容納選中文本再加上一個終止NULL字符,。

獲取給定范圍的文本,,使用EM_GETTEXTRANGE消息。該消息將使用TEXTRANGE結(jié)構(gòu),,用于描述需要獲得的文本范圍以及用于獲取該文本的字符數(shù)組指針,。在這里,同樣的,,你必須確保數(shù)組大小足以容納選中文本再加上一個終止NULL字符,。

 你可以使用EM_FINDTEXT消息在一個Rich Edit控件中查找字符串。該消息將使用結(jié)構(gòu),,用于描述文本查找范圍及需要查找的字符串,。你也可以指定諸如是否區(qū)分大小寫等搜索選項(xiàng),。

2.6    斷字與斷行
Rich Edit 控件調(diào)用叫做"斷字處理過程"的函數(shù)來查找單詞間分隔符以及判斷何處可以換行,??丶趫?zhí)行自動換行操作時以及處理Ctrl+左箭頭和Ctrl+右箭頭的組合鍵時將利用這些信息。應(yīng)用程序可以通過向Rich Edit控件發(fā)送消息來替換默認(rèn)的"斷字處理過程",,獲取斷字信息,,以及判斷一個給定字符屬于哪一行。

Rich Edit控件的斷字處理過程與Edit控件相似,,但是它擁有更多能力,。兩種控件的斷字處理過程均可以識別一個字符是否是一個分隔符,并且能夠在找到給定位置的前一個或者后一個字分隔符,。分隔符指的是一個標(biāo)志單詞結(jié)束的字符,,比如空格。在Edit控件中,,斷字只出現(xiàn)在分隔符之后,。

Rich Edit控件的斷字處理過程同時將字符組合為字符類,由到0x00的0x0F值來標(biāo)識,。斷字可以出現(xiàn)在分隔符之后或者在不同類的字符之間,。因此,在字符串"WIN.COM"中,,由于字母數(shù)字和標(biāo)點(diǎn)屬于不同類別,,斷字程序?qū)⒄业絻蓚€字分隔符。

一個字符類別可以由0個或者更多的字分隔符標(biāo)志位組成一個8位的值,。當(dāng)執(zhí)行自動換行操作時,,Rich Edit控件使用這些分隔符標(biāo)志位來決定何處可以換行。有如下這些字分隔標(biāo)志位:

WBF_BREAKAFTER
 字符后面可以換行,。
 
WBF_BREAKLINE
 該字符為一個分隔符,。分隔符標(biāo)記單詞的結(jié)束。也可以在分隔符后換行,。
 
WBF_ISWHITE
 該字符為一個白空格字符,。跟隨的白空格字符在換行時不包含在行長度中。
 

WBF_BREAKAFTER表示允許在該字符后面折行,,但是并不標(biāo)記單詞的結(jié)束,,比如連字符-。

你可以使用EM_SETWORDBREAKPROC消息來替換Rich Edit控件的默認(rèn)斷字處理過程,。獲取更多關(guān)于斷字處理過程的信息,,請參閱EditWordBreakProc函數(shù)說明。

另外,,你可以使用EM_SETWORDBREAKPROCEX消息來替換默認(rèn)的擴(kuò)展斷字處理過程EditWordBreakProcEx函數(shù),。該函數(shù)提供有關(guān)該文本的更多信息,,比如字符集。你可以使用EM_GETWORDBREAKPROCEX消息來獲取當(dāng)前擴(kuò)展斷字處理過程的地址,。

你可以使用EM_FINDWORDBREAK消息來查找斷字符或者確定一個字符類和斷字標(biāo)志位,。控件依次調(diào)用其斷字處理過程,,獲取所需信息,。

判斷給定字符屬于哪一行,你可以使用EM_EXLINEFROMCHAR消息,。

2.7    Rich Edit 剪貼板操作
應(yīng)用程序可以粘貼剪貼板中內(nèi)容到一個Rich Edit控件中,,采用最佳可用剪貼板格式或者指定的剪貼板格式。你也可以決定是否一個Rich Edit控件可以粘貼某種剪貼板格式,。

對于一個Edit控件而言,,你可以使用WM_COPY或者WM_CUT消息來拷貝或者剪切當(dāng)前選中內(nèi)容。同樣的,,你可以使用WM_PASTE消息將這些剪貼板內(nèi)容粘貼到一個Rich Edit控件中,。控件將粘貼它所識別的第一個可用格式,,這大概是最具描述性的格式,。

你可以使用EM_PASTESPECIAL消息來粘貼指定的剪貼板格式。這個消息對具有"特殊粘貼"命令的應(yīng)用程序很有用,,該命令可以讓用戶選擇剪貼板格式,。你可以使用EM_CANPASTE消息來決定控件是否識別某種指定的格式。

你也可以使用EM_CANPASTE消息來決定Rich Edit控件是否識別所有可用的剪貼板格式,。該消息在處理WM_INITMENUPOPUP消息時很有用,。應(yīng)用程序可以啟用或者屏蔽"粘貼"命令,取決于控件是否可以粘貼任一個可用類型,。

Rich Edit控件注冊兩種剪貼板格式:"富文本格式(RTF)"和一種叫做"RichEdit 文本與對象"的格式,。應(yīng)用程序可以使用RegisterClipboardFormat函數(shù)來注冊這些格式,其取值為CF_RTF與CF_RETEXTOBJ,。

2.8    流(Stream)
你可以使用流(Stream)向Rich Edit控件傳入或者傳出數(shù)據(jù),。流由EDITSTREAM結(jié)構(gòu)所定義,該結(jié)構(gòu)描述一個緩沖區(qū)及一個應(yīng)用程序定義的回調(diào)函數(shù),。

將數(shù)據(jù)讀入Rich Edit控件(或者說,,數(shù)據(jù)傳入),使用EM_STREAMIN消息,??丶⒅貜?fù)調(diào)用應(yīng)用程序的回調(diào)函數(shù),該函數(shù)每次傳入數(shù)據(jù)的一部分到緩沖區(qū)中,。

保存Rich Edit控件內(nèi)容(或者說,,數(shù)據(jù)傳出),,你可以使用EM_STREAMOUT消息??丶⒅貜?fù)寫入緩沖區(qū)然后調(diào)用應(yīng)用程序的回調(diào)函數(shù),。對于每次調(diào)用,回調(diào)函數(shù)將保存緩沖區(qū)中的內(nèi)容,。

2.9    打印
你可以向Rich Edit控件發(fā)送消息來將其輸出重定向到指定設(shè)備,,比如打印機(jī)。你也可以指定一個用于Rich Text文本格式化的輸出設(shè)備,。

對于特殊設(shè)備而言,要格式化Rich Edit控件中部分內(nèi)容,,你可以使用EM_FORMATRANGE消息,。FORMATRANGE結(jié)構(gòu)用于在該消息中描述需要格式化的文本范圍以及目標(biāo)設(shè)備的設(shè)備場景。

在輸出設(shè)備文本格式化完成后,,你可以使用EM_DISPLAYBAND消息將輸出發(fā)送至設(shè)備,。通過反復(fù)使用EM_FORMATRANGE和EM_DISPLAYBAND消息,打印Rich Text控件內(nèi)容的應(yīng)用程序可以實(shí)現(xiàn)條帶化操作,。(條帶化操作指的是將輸出分割為較小部分用于打印目的的操作,。)

你可以使用EM_SETTARGETDEVICE消息來指定一個用于Rich Text文本格式化的目標(biāo)設(shè)備。該消息對于WYSIWYG(所見即所得)模式非常有用,,在該模式下應(yīng)用程序采用默認(rèn)打印機(jī)字體規(guī)格而非屏幕字體規(guī)格來定位文本,。

2.10 無底的Rich Edit 控件
應(yīng)用程序可以調(diào)整Rich Edit控件的大小以便它總是與其內(nèi)容大小匹配。Rich Edit控件支持這種所謂的"無底"特性,,在任何時候若其內(nèi)容大小改變,,它將向其父窗體發(fā)送EN_REQUESTRESIZE通知。

在處理EN_REQUESTRESIZE通知時,,應(yīng)用程序應(yīng)該調(diào)整控件尺寸為REQRESIZE結(jié)構(gòu)所給出的大小,。應(yīng)用程序同樣可以變換控件相關(guān)的任何信息以適應(yīng)控件的高度改變。調(diào)整控件大小,,你可以使用SetWindowPos函數(shù),。

你可以使用EM_REQUESTRESIZE消息強(qiáng)制一個無底Rich Edit控件發(fā)送EN_REQUESTRESIZE通知。該消息在處理WM_SIZE消息時很有用,。

為了接收EN_REQUESTRESIZE通知,,你必須采用EM_SETEVENTMASK消息來啟用它。

2.11 各種各樣的通知
Rich Edit控件父窗體可以處理通知,,這些消息記錄影響該控件的事件,。Rich Edit控件支持所有Edit控件所使用的通知,同時具有幾個新增的通知,。你可以通過設(shè)置它的事件掩碼(Event Mask)來判斷Rich Edit控件發(fā)送到其父窗體的是何種通知,。

設(shè)置Rich Edit控件的事件掩碼,,采用EM_SETEVENTMASK消息。你可以使用EM_GETEVENTMASK消息來獲取當(dāng)前Rich Edit控件的事件掩碼,。

Rich Edit控件的父窗體可以通過處理EN_MSGFILTER通知來過濾所有的鍵盤和鼠標(biāo)輸入,。父窗體可以防止鍵盤和鼠標(biāo)消息被處理,或者可以通過修改指定的MSGFILTER結(jié)構(gòu)來修改這些消息,。

應(yīng)用程序可以處理EN_PROTECTED通知,,用以檢測何時用戶試圖修改受保護(hù)的文本。為了置某個范圍的文本為受保護(hù)狀態(tài),,你可以設(shè)置受保護(hù)字符效果,。獲取更多信息,請參閱文本格式,。

你可以通過處理EN_DROPFILES通知來允許用戶Drop一個文件到Rich Edit控件中,。指定的ENDROPFILES結(jié)構(gòu)包含了即將被Drop的文件的相關(guān)信息。

2.11 不支持的Edit控件的特性
Rich Edit 控件支持絕大多數(shù)而并非全部的多行Edit控件的特性,。本節(jié)列舉出Rich Edit控件所不支持的Edit控件的消息和窗體樣式,。

下面的消息由Edit控件處理,而不被Rich Edit控件所支持,。

不支持的消息
 注釋
 
EM_FMTLINES
 不支持,。
 
EM_GETHANDLE
 Rich Edit控件并非將文本存儲為簡單的字符數(shù)組。
 
EM_GETMARGINS
 不支持,。
 
EM_GETPASSWORDCHAR
 不支持ES_PASSWORD樣式,。
 
EM_SETHANDLE
 Rich Edit控件并非將文本存儲為簡單的字符數(shù)組。
 
EM_SETMARGINS
 不支持,。
 
EM_SETPASSWORDCHAR
 不支持ES_PASSWORD樣式,。
 
EM_SETRECTNP
 不支持。
 
EM_SETTABSTOPS
 采用EM_SETPARAFORMAT消息,。
 
WM_CTLCOLOR
 采用EM_SETBKGNDCOLOR消息,。
 
WM_GETFONT
 采用EM_GETCHARFORMAT消息。
 

下面的窗體樣式用于多行Edit控件,,而不被Rich Edit控件所支持:

ES_LOWERCASE
 ES_PASSWORD
 
ES_OEMCONVERT
 ES_UPPERCASE
 

 

三,、Rich Edit 控件參考
3.1 總索引
Rich Text控件相關(guān)的消息、通知和結(jié)構(gòu)體分組匯總?cè)缦?。部分API元素也用于Edit控件,。

格式化
CHARFORMAT
CHARFORMAT2
EM_GETCHARFORMAT
EM_GETPARAFORMAT
EM_GETRECT
EM_SETBKGNDCOLOR
EM_SETCHARFORMAT
EM_SETEVENTMASK
EM_SETPARAFORMAT
EM_SETRECT
PARAFORMAT2
選中區(qū)域與Hit測試
CHARRANGE
EM_CHARFROMPOS
EM_EXGETSEL
EM_EXSETSEL
EM_GETFIRSTVISIBLELINE
EM_GETSEL
EM_HIDESELECTION
EM_POSFROMCHAR
EM_SELECTIONTYPE
EM_SETSEL
EN_SELCHANGE
SELCHANGE
文本操作
EM_EXLIMITTEXT
EM_FINDTEXT
EM_GETLIMITTEXT
EM_GETSELTEXT
EM_GETTEXTRANGE
EM_REPLACESEL
EM_SETLIMITTEXT
FINDTEXT
TEXTRANGE
斷字與斷行
EM_EXLINEFROMCHAR
EM_FINDWORDBREAK
EM_GETWORDBREAKPROC
EM_SETWORDBREAKPROC
EM_GETWORDBREAKPROCEX
EM_SETWORDBREAKPROCEX
EditWordBreakProcEx
行與滾動條
EM_GETLINE
EM_GETLINECOUNT
EM_GETTHUMB
EM_LINEFROMCHAR
EM_LINEINDEX
EM_LINELENGTH
EM_LINESCROLL
EM_SCROLL
EM_SCROLLCARET
編輯操作
EM_CANPASTE
EM_CANUNDO
EM_EMPTYUNDOBUFFER
EM_PASTESPECIAL
EM_UNDO

EDITSTREAM
EM_STREAMIN
EM_STREAMOUT
打印
EM_DISPLAYBAND
EM_FORMATRANGE
EM_SETTARGETDEVICE
FORMATRANGE
無底Rich Edit 控件
EM_REQUESTRESIZE
EN_REQUESTRESIZE
REQRESIZE
OLE 接口
IRichEditOle
IRichEditOleCallback
雜項(xiàng)
EM_GETEVENTMASK
EM_GETIMECOLOR
EM_GETIMEOPTIONS
EM_GETMODIFY
EM_GETOPTIONS
EM_GETPUNCTUATION
EM_GETWORDWRAPMODE
EM_SETEVENTMASK
EM_SETIMECOLOR
EM_SETIMEOPTIONS
EM_SETEVENTMASK
EM_SETMODIFY
EM_SETREADONLY
EM_SETOPTIONS
EM_SETPUNCTUATION
EM_SETWORDWRAPMODE
EN_CHANGE
EN_CORRECTTEXT
EN_DROPFILES
EN_ERRSPACE
EN_HSCROLL
EN_IMECHANGE
EN_KILLFOCUS
EN_MAXTEXT
EN_MSGFILTER
EN_OLEOPFAILED
EN_PROTECTED
EN_SAVECLIPBOARD
EN_SETFOCUS
EN_STOPNOUNDO
EN_UPDATE
EN_VSCROLL
WM_CONTEXTMENU
WM_CTLCOLOREDIT
COMPCOLOR
ENCORRECTTEXT
ENDROPFILES
ENOLEOPFAILED
ENPROTECTED
ENSAVECLIPBOARD
PUNCTUATION
MSGFILTER
 3.2 Rich Edit 回調(diào)函數(shù)
下列回調(diào)函數(shù)是Rich Edit控件所特有的:

EditStreamCallback
 
EditWordBreakProcEx
 

3.2.1 EditStreamCallback
EditStreamCallback函數(shù)是一個應(yīng)用程序定義的回調(diào)函數(shù),用于EM_STREAMIN和EM_STREAMOUT消息,。它用于將數(shù)據(jù)傳入或者傳出一個Rich Edit控件,。EDITSTREAMCALLBACK類型定義了一個指向該回調(diào)函數(shù)的指針。EditStreamCallback是一個用于該應(yīng)用程序定義的函數(shù)名的占位符,。


DWORD CALLBACK EditStreamCallback(


  DWORD dwCookie,     // application-defined value


  LPBYTE pbBuff,      // 緩沖區(qū)指針
         

  LONG cb,                // 讀或?qū)懙淖止?jié)數(shù)
         

  LONG *pcb           // 實(shí)際傳輸?shù)淖止?jié)數(shù)的指針
         

);
       
參數(shù)說明
dwCookie

指定EDITSTREAM結(jié)構(gòu)中的dwCookie成員的值,。應(yīng)用程序在發(fā)送EM_STREAMIN和EM_STREAMOUT消息時將指定該值,。

pbBuff

用于讀取或?qū)懭氲木彌_區(qū)指針。對于一個流入(讀)操作,,回調(diào)函數(shù)將數(shù)據(jù)填入該緩沖區(qū),,再傳入Rich Edit控件。對于流出(寫)操作,,緩沖區(qū)包含從控件中讀取的數(shù)據(jù),,回調(diào)函數(shù)負(fù)責(zé)將其寫入存儲器中。

cb

指出讀取和寫入的字節(jié)數(shù),。

pcb

一個變量的指針,,回調(diào)函數(shù)將設(shè)置該變量的值為實(shí)際讀取或?qū)懭氲淖止?jié)數(shù)。

返回值
回調(diào)函數(shù)返回0表示成功,。.

回調(diào)函數(shù)返回非0值表示發(fā)生錯誤,。一旦發(fā)生錯誤,讀寫操作將終止,,Rich Edit控件將放棄pbBuff緩沖區(qū)中的任何數(shù)據(jù)。如果一個回調(diào)函數(shù)返回一個非0值,,Rich Edit控件將采用EDITSTREAM結(jié)構(gòu)的dwError成員將該值傳回應(yīng)用程序,。

備注
當(dāng)你發(fā)送EM_STREAMIN和EM_STREAMOUT消息到一個Rich Edit控件時,需要為EDITSTREAM結(jié)構(gòu)的pfnCallback成員指定一個EditStreamCallback函數(shù)指針,。Rich Edit控件將不斷調(diào)用該函數(shù)來輸出或者輸入數(shù)據(jù),。

當(dāng)你發(fā)送EM_STREAMIN和EM_STREAMOUT消息時,你需要給出一個EDITSTREAM結(jié)構(gòu)的dwCookie成員的值,。Rich Edit控件使用dwCookie參數(shù)將該值傳遞到EditStreamCallback函數(shù)中,。例如,你可能使用dwCookie來傳遞一個打開的文件的句柄,,回調(diào)函數(shù)就可以使用該dwCookie句柄來讀取和寫入文件,。

控件不斷調(diào)用回調(diào)函數(shù),每次傳遞部分?jǐn)?shù)據(jù),??丶粩嗾{(diào)用回調(diào)函數(shù),直至出現(xiàn)如下情況之一為止:

回調(diào)函數(shù)返回一個非0值,。
回調(diào)函數(shù)在*pcb參數(shù)中返回0值,。
*pcb參數(shù)返回的值小于cb參數(shù)請求的字節(jié)數(shù)。
發(fā)生錯誤,,該錯誤拒絕Rich Edit控件數(shù)據(jù)的傳出或者傳入,。例如內(nèi)存溢出狀態(tài),系統(tǒng)函數(shù)失敗,,或者讀取緩沖區(qū)包含一個無效字符等,。
對于一個流入操作,,RTF代碼包含表示一個RTF塊結(jié)束的數(shù)據(jù)。
對于一個單行編輯控件的流入操作,,回調(diào)函數(shù)讀取到一個CRLF,。
3.2.2 EditWordBreakProcEx
EditWordBreakProcEx函數(shù)是一個應(yīng)用程序定義的回調(diào)函數(shù),用于EM_SETWORDBREAKPROCEX消息,。它決定字符在某段給定文本中的字分隔符的字符索引,,或者是字符類和字分隔符標(biāo)志位。EDITWORDBREAKPROCEX類型定義了一個回調(diào)函數(shù)的指針,。EditWordBreakProcEx是一個應(yīng)用程序定義的函數(shù)名的占位符,。


LONG EditWordBreakProcEx(


  char *pchText,
       

  LONG cchText,
       

  BYTE bCharSet,
       

  INT code        
       

);
       
參數(shù)
pchText

當(dāng)前位置的文本的指針。如果code指定要向左移動,,則文本為元素pchText[-1]到pchText[-cchText]的文本,,pchText[0]未定義。對于其他所有操作,,文本指的是pchText[0]到pchText[cchText - 1]的文本,。

cchText

由code指定的搜索方向上的緩沖區(qū)中的字符數(shù)。

bCharSet

文本的字符集,。

code

所執(zhí)行的斷字動作,。可用的取值由EM_FINDWORDBREAK消息的code參數(shù)所描述,。

返回值
返回字母分隔符的字符索引值,,除非code參數(shù)是WB_CLASSIFY和WB_ISDELIMITER值。

備注
應(yīng)用程序必須安裝回調(diào)函數(shù),,方法是在EM_SETWORDBREAKPROCEX消息中給出回調(diào)函數(shù)的地址,。

3.3 Rich Edit 結(jié)構(gòu)體
下列結(jié)構(gòu)體用于Rich Edit控件:

CHARFORMAT
 
CHARFORMAT2
 
CHARRANGE
 
COMPCOLOR
 
EDITSTREAM
 
ENCORRECTTEXT
 
ENDROPFILES
 
ENLINK
 
ENOLEOPFAILED
 
ENPROTECTED
 
ENSAVECLIPBOARD
 
FINDTEXT
 
FINDTEXTEX
 
FORMATRANGE
 
MSGFILTER
 
PARAFORMAT
 
PARAFORMAT2
 
PUNCTUATION
 
REOBJECT
 
REPASTESPECIAL
 
REQRESIZE
 
SELCHANGE
 
TEXTRANGE
 

3.4 Rich Edit 消息
以下消息由Rich Edit控件所獨(dú)有:

EM_AUTOURLDETECT
 
EM_CANPASTE
 
EM_CANREDO
 
EM_DISPLAYBAND
 
EM_EXGETSEL
 
EM_EXLIMITTEXT
 
EM_EXLINEFROMCHAR
 
EM_EXSETSEL
 
EM_FINDTEXT
 
EM_FINDTEXTEX
 
EM_FINDWORDBREAK
 
EM_FORMATRANGE
 
EM_GETCHARFORMAT
 
EM_GETEVENTMASK
 
EM_GETIMECOLOR
 
EM_GETIMECOMPMODE
 
EM_GETIMEOPTIONS
 
EM_GETLANGOPTIONS
 
EM_GETOLEINTERFACE
 
EM_GETOPTIONS
 
EM_GETPARAFORMAT
 
EM_GETPUNCTUATION
 
EM_GETREDONAME
 
EM_GETSELTEXT
 
EM_GETTEXTMODE
 
EM_GETTEXTRANGE
 
EM_GETUNDONAME
 
EM_GETWORDBREAKPROCEX
 
EM_GETWORDWRAPMODE
 
EM_HIDESELECTION
 
EM_PASTESPECIAL
 
EM_REDO
 
EM_REQUESTRESIZE
 
EM_SELECTIONTYPE
 
EM_SETBKGNDCOLOR
 
EM_SETCHARFORMAT
 
EM_SETEVENTMASK
 
EM_SETIMECOLOR
 
EM_SETIMEOPTIONS
 
EM_SETLANGOPTIONS
 
EM_SETOLECALLBACK
 
EM_SETOPTIONS
 
EM_SETPARAFORMAT
 
EM_SETPUNCTUATION
 
EM_SETTARGETDEVICE
 
EM_SETTEXTMODE
 
EM_SETUNDOLIMIT
 
EM_SETWORDBREAKPROCEX
 
EM_SETWORDWRAPMODE
 
EM_STOPGROUPTYPING
 
EM_STREAMIN
 
EM_STREAMOUT
 
WM_CONTEXTMENU
 

3.5 Rich Edit 通知
Rich Edit控件支持絕大多數(shù)的Edit控件所使用的通知,同時增加了如下的通知,。一個Rich Edit控件只有在使用EM_SETEVENTMASK消息啟用了它之后才能發(fā)送下面的通知,。

EN_CORRECTTEXT
 
EN_DROPFILES
 
EN_IMECHANGE
 
EN_LINK
 
EN_MSGFILTER
 
EN_OLEOPFAILED
 
EN_PROTECTED
 
EN_REQUESTRESIZE
 
EN_SAVECLIPBOARD
 
EN_SELCHANGE
 
EN_STOPNOUNDO
 

3.6 Rich Edit OLE接口
Rich Edit 控件支持由OLE所定義的客戶端的支持。該控件為大多數(shù)的OLE客戶端提供完全的支持,。它不支持鏈接到自身內(nèi)容,。客戶端負(fù)責(zé)處理對話框和錯誤消息,、OLE對象的存儲處理,,以及文檔和應(yīng)用程序窗體級的實(shí)時激活支持??蛻舳丝梢允褂肊M_GETOLEINTERFACE消息從Rich Edit控件獲取一個IRichEditOle接口,,該接口允許它控制OLE對象。客戶端使用EM_SETOLECALLBACK消息注冊一個IRichEditOleCallback接口,,控件將使用它獲取所需接口和存儲,。

下列OLE接口用于Rich Edit控件:

IRichEditOle
 
IRichEditOleCallback  
 

3.6.1 IRichEditOle
指定用于Rich Edit控件執(zhí)行OLE相關(guān)操作的接口。IRichEditOle接口有下列方法:

方法列表
IUnknown 方法
 描述
 
QueryInterface
 返回支持的接口的指針,。
 
AddRef
 增加引用計數(shù),。
 
Release
 減少引用計數(shù)。
 

 

IRichEditOle方法
 描述
 
GetClientSite
 在創(chuàng)建一個新對象時獲取一個可用的IOleClientSite接口,。
 
GetObjectCount
 獲取Rich Edit控件中包含的對象數(shù)目,。
 
GetLinkCount
 獲取Rich Edit控件中鏈接的對象數(shù)目。
 
GetObject
 返回Rich Edit控件中一個REOBJECT結(jié)構(gòu)描述的對象信息,。
 
InsertObject
 將一個對象插入到Rich Edit控件中,。
 
ConvertObject
 將一個對象轉(zhuǎn)換為一個新類型。
 
ActivateAs
 卸載屬于舊類的對象,,告訴OLE將其看做新類對象,,然后重新調(diào)入這些對象。
 
SetHostNames
 當(dāng)對象插入到Rich Edit控件中時,,設(shè)置一個"Host Names"給該對象,。
 
SetLinkAvailable
 設(shè)置對象標(biāo)志位中的可用鏈接位的值。
 
SetDvaspect
 設(shè)置Rich Edit控件用于繪制一個對象的特征,。
 
HandsOffStorage
 告訴Rich Edit控件釋放其指定對象相關(guān)的訪問存儲器接口,。
 
SaveCompleted
 告訴Rich Edit控件最近的保存操作已經(jīng)完畢,應(yīng)該繼續(xù)存儲該對象至不同存儲器,。
 
InPlaceDeactivate
 告訴Rich Edit控件立即使當(dāng)前激活的對象處于非激活狀態(tài)。
 
ContextSensitiveHelp
 告訴Rich Edit控件進(jìn)入或者退出上下文相關(guān)幫助模式,。
 
GetClipboardData
 獲取一個剪貼板對象,,用于Edit控件的某一區(qū)域。
 
ImportDataObject
 導(dǎo)入一個剪貼板對象至Rich Edit控件,,替換當(dāng)前選中的內(nèi)容,。
 

3.6.2 IRichEditOleCallback
指定一個用于Rich Edit控件從客戶端獲取OLE相關(guān)信息的接口。Rich Edit 控件的客戶端負(fù)責(zé)實(shí)現(xiàn)該接口,,并通過EM_SETOLECALLBACK消息將其指派給一個控件,。IRichEditOleCallback接口包含如下方法:

方法列表
IUnknown 方法
 描述
 
QueryInterface
 返回支持的接口的指針。
 
AddRef
 增加引用計數(shù),。
 
Release
 減少引用計數(shù),。
 

 

IRichEditOleCallback 方法
 描述
 
GetNewStorage
 為一個粘貼自剪貼板或者從一個RTF流讀取的對象提供存儲。
 
GetInPlaceContext
 提供應(yīng)用程序和文件級的接口以及支持原地激活的必需的信息,。
 
ShowContainerUI
 告訴應(yīng)用程序是否顯示其用戶接口容器,。
 
QueryInsertObject
 詢問應(yīng)用程序是否一個對象應(yīng)該被插入。
 
DeleteObject
 通知某一對象將在Rich Edit中被刪除。
 
QueryAcceptData
 訪問一個粘貼或者拖拽,,以決定是否其粘貼/拖拽的數(shù)據(jù)應(yīng)該被接受,。
 
ContextSensitiveHelp
 告訴應(yīng)用程序應(yīng)該進(jìn)入或者退出上下文相關(guān)幫助模式。
 
GetClipboardData
 允許客戶端支持其自身剪貼板對象,。
 
GetDragDropEffect
 允許客戶端指定其拖放操作的執(zhí)行結(jié)果,。
 
GetContextMenu
 在一個鼠標(biāo)右鍵按下事件中,詢問應(yīng)用程序提供一個上下文菜單,。
 

3.7 Rich Edit枚舉類型
下列枚舉類型用于Rich Edit控件:

TEXTMODE
 
UNDONAMEID
 

3.7.1 TEXTMODE
TEXTMODE 枚舉類型包含用于表示Rich Edit控件的文本模式的值,。EM_SETTEXTMODE 和 EM_GETTEXTMODE m消息將使用這個枚舉類型。


typedef enum tagTextMode


{


    TM_PLAINTEXT            = 1,


    TM_RICHTEXT             = 2,        // 默認(rèn)值
         

    TM_SINGLELEVELUNDO      = 4,


    TM_MULTILEVELUNDO       = 8,        // 默認(rèn)值
         

    TM_SINGLECODEPAGE       = 16,


    TM_MULTICODEPAGE        = 32


} TEXTMODE;

 

常數(shù)
 涵義
 
TM_PLAINTEXT
 純文本模式,,這種模式下控件類似標(biāo)準(zhǔn)編輯控件,。
 
TM_RICHTEXT
 富文本模式,這種模式下控件具備標(biāo)準(zhǔn)Rich Edit功能,。為默認(rèn)設(shè)置,。
 
TM_SINGLELEVELUNDO
 控件只允許撤銷Undo隊(duì)列中的最后一個動作。
 
TM_MULTILEVELUNDO
 控件支持多級撤銷操作,。為默認(rèn)屬性,。使用EM_SETUNDOLIMIT消息來設(shè)置撤銷操作的最大級數(shù)。
 
TM_SINGLECODEPAGE
 不支持,。
 
TM_MULTICODEPAGE
 不支持,。
 

3.7.2 UNDONAMEID
UNDONAMEID 枚舉類型包含指示Rich Edit控件動作的常數(shù),這些動作可以用于撤銷和重做操作,。 EM_GETREDONAME 和 EM_GETUNDONAME 將使用該枚舉類型作為一個返回值,。


typedef enum _undonameid {


    UID_UNKNOWN        = 0,


    UID_TYPING         = 1,


    UID_DELETE         = 2,


    UID_DRAGDROP       = 3,


    UID_CUT            = 4,


    UID_PASTE          = 5


} UNDONAMEID;

 

常數(shù)
 涵義
 
UID_UNKNOWN
 Undo操作類型未知。
 
UID_TYPING
 鍵入操作,。
 
UID_DELETE
 刪除操作,。
 
UID_DRAGDROP
 拖拽-放下操作。
 
UID_CUT
 剪切操作,。
 
UID_PASTE
 粘貼操作,。
 

3.8 Rich Edit 常數(shù)
3.8.1 Rich Edit控件樣式
下列窗體樣式屬于Rich Edit控件所獨(dú)有:

樣式
 描述
 
ES_DISABLENOSCROLL
 在不需要滾動條時將它們置灰,而非隱藏,。
 
ES_EX_NOCALLOLEINIT
 禁止控件在創(chuàng)建時調(diào)用OleInitialize函數(shù),。僅在對話框模式下有用,因?yàn)镃reateWindowEx不支持該樣式,。
 
ES_NOIME
 禁止輸入方式編輯(IME)操作,。只對亞洲語言有效。
 
ES_SAVESEL
 在控件失去焦點(diǎn)時保持選定區(qū)域,。默認(rèn)情況下,,在控件重新獲取焦點(diǎn)時將選擇所有內(nèi)容。
 
ES_SELFIME
 指示Rich Edit控件允許應(yīng)用程序控制所有的IME操作。只對亞洲語言有效,。
 
ES_SUNKEN
 控件顯示為下凹邊框樣式,,看起來像是嵌入到其父窗體中。

Windows 95: Windows 95下的應(yīng)用程序應(yīng)該使用WS_EX_CLIENTEDGE,,而非ES_SUNKEN,。
 
ES_VERTICAL
 垂直繪制文本和對象。只對亞洲語言有效,。
 

Rich Edit 控件同樣支持下面的Edit控件樣式,。為了允許多行文本,你就必須指定ES_MULTILINE樣式,。

ES_AUTOHSCROLL
 ES_NOHIDESEL
 
ES_AUTOVSCROLL
 ES_READONLY
 
ES_CENTER
 ES_RIGHT
 
ES_LEFT
 ES_WANTRETURN
 
ES_MULTILINE
   

 

Rich Edit控件不支持下面的Edit控件樣式:

ES_LOWERCASE
 ES_PASSWORD
 
ES_OEMCONVERT
 ES_UPPERCASE
 

3.8.2 Rich Edit控件事件掩碼標(biāo)志
事件掩碼用于指定一個Rich Edit控件向父窗體發(fā)送何種通知,。事件掩碼可以為0或下列多種取值:


 涵義
 
ENM_CHANGE
 發(fā)送EN_CHANGE 通知。
 
ENM_CORRECTTEXT
 發(fā)送EN_CORRECTTEXT通知,。
 
ENM_DROPFILES
 發(fā)送EN_DROPFILES通知,。
 
ENM_KEYEVENTS
 發(fā)送EN_MSGFILTER鍵盤事件通知。
 
ENM_MOUSEEVENTS
 發(fā)送EN_MSGFILTER 鼠標(biāo)事件通知,。
 
ENM_PROTECTED
 發(fā)送EN_PROTECTED通知,。
 
ENM_RESIZEREQUEST
 發(fā)送EN_REQUESTRESIZE通知。
 
ENM_SCROLL
 發(fā)送EN_HSCROLL通知,。
 
ENM_SELCHANGE
 發(fā)送EN_SELCHANGE通知,。
 
ENM_UPDATE
 發(fā)送EN_UPDATE通知。
 

     默認(rèn)事件掩碼為ENM_NONE,,這種情況下將不會發(fā)送任何通知到父窗體,。你可以通過ENM_GETEVENTMASK和ENM_SETEVENTMASK消息來獲取和設(shè)置Rich Edit控件的事件掩碼。

四,、參考文獻(xiàn)
1,、MSDN Library Visual Studio6.0(CHS),我們在MSDN上可以找到最新版本的SDK文檔,,地址如下: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/commctls/richedit/richeditcontrols/aboutricheditcontrols.asp

2、Wind32 SDK下的RICHEDIT.H頭文件(2.0版本):包含了絕大多數(shù)函數(shù)聲明和結(jié)構(gòu)體及常數(shù)的C定義,。對于其對應(yīng)的VB聲明,,我會在接下來發(fā)布。

摘自:http://www./article.asp?id=13

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報,。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多