版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
200CHAPTER9InternetControlMessageProtocolVersion4(ICMPv4Exercises1.或更高3.ItcouldhappenthathostBisunreachable,forsomereason.TheerrormessagegeneratedbyanintermediateroutercouldthenbelostonitswaybacktohostA.Orperhapsthedatagramwasdroppedduetocongestionandtheerrormessagegeneratedbyanintermediaterouterwaslost.5.Themaximumvalueis59becausethepointerpointstoabytesomewhereintheoriginalIPheader(amaximumof60bytes.Anoffsetof0wouldpointtothefirstbyte,soanoffsetof59wouldpointtothe60thbyte.17.SeeTable9.E7.Table9.E7SolutiontoExercise7CategoryTypeDestinationunreachableCode0123456789101112131415Non-Dest.hostRouter√√Destin.hostError√√√√√√√√√√√√√√√√√√√√SourcequenchTimeexceededParameterproblemRedirection001000000√√√√√√QueryEchorequestEchoreplyTimestamprequestTimestampreply√√√9.Theonewaytimeisnottheroundtripdividedby2becausetherequestpacketmayhavetraveledbyadifferentroutethantheresponsepacket.Inthiscase,thetransmissiontimeinonedirectionmaybedifferentthanthetransmissiontimeintheotherdirection.11.TheminimumsizeofanIPpacketthatcarriesanICMPpacketwouldbe28bytes(a20byteIPheader+an8byteroutersolicitationpacket.Themaximumsizewouldbe2068bytes(a20byteIPheader+a2048byterouteradvertisementpacket.13.ThevalueoftheprotocolfieldofanIPpacketcarryinganICMPpacketis1.15.SeeFigure9.E15.Figure9.E15SolutiontoExercise154.1Figure9.E19SolutiontoExercise1921.2:34:20PM=52,460,000ms52,460,000ms?52,453,000ms=7000ms7000ms+5ms=7005milliseconds23.Assumethatthemessagetravelsat2×108meters/secondandthat6.2milesequals10kilometers.(5000(10/6.2=8064.5km=8.06×106meters(8.06×106meters/2×108meters/second=4.03×10-2s=40.3msMsftedit.dll
下表給出了不同版本W(wǎng)indows下與其包含的不同版本的RichEdit對應(yīng)關(guān)系:WindowsXPSP1包含RichEdit4.1,RichEdit3.0,和一個RichEdit1.0仿真程序。WindowsXP包含RichEdit3.0和一個RichEdit1.0仿真程序。WindowsMe包含RichEdit1.0和3.0。Windows2000包含RichEdit3.0和一個RichEdit1.0仿真程序。WindowsNT4.0包含RichEdit1.0和2.0。Windows98包含RichEdit1.0和2.0。Windows95只包含RichEdit1.0。不過,Riched20.DLL與Windows95系統(tǒng)兼容,所以可以在正確安裝后使用。2.1RichEdit2.0RichEdit2.0包含幾個新特性,比如支持Unicode和遠(yuǎn)東語言,多級撤消,以及大量的增強用戶接口。RichEdit2.0采用與RichEdit1.0一致的Win32函數(shù),結(jié)構(gòu)和消息,極少例外。他們的區(qū)別在于:?RichEdit1.0窗體類的名字叫“RichEdit”。RichEdit2.0同時具有ANSI和Unicode窗體類,“RichEdit20A”和“RichEdit20W”分別表示對應(yīng)的RichEdit窗體類,我們RichEdit.H文件定義的RICHEDIT_CLASS常數(shù)來區(qū)分,而具體采用哪一個取決于UNICODE編譯標(biāo)志。?在RichEdit2.0中,如果你創(chuàng)建一個Unicode控件,只需在任何發(fā)往控件的Window消息中給出Unicode數(shù)據(jù)。同樣的,如果創(chuàng)建了一個ANSI控件,只能發(fā)送ANSI或者DBCS數(shù)據(jù)。你可以使用IsWindowUnicode函數(shù)來判斷是否一個RichEdit控件是Unicode的。?RichEdit1.0采用CRLF(回車符和換行符字符組合表示段落符號。而RichEdit2.0只采用一個回車符號(‘\r’。?RichEdit2.0包含以下新的消息:消息描述EM_AUTOURLDETECT是否開啟/關(guān)閉自動URL檢測。EM_CANREDO判斷是否在Redo隊列中有一些動作。EM_GETIMECOMPMODE獲取當(dāng)前輸入方式編輯(IME模式。EM_GETLANGOPTIONS獲取IME和遠(yuǎn)東語言支持選項。EM_GETREDONAME獲取Redo隊列中的下一動作的類型名稱。EM_GETTEXTMODE獲取文本模式或者Undo級別。EM_GETUNDONAME獲取Undo隊列中的下一動作的類型名稱。EM_REDO重做Redo隊列中的下一動作。EM_SETLANGOPTIONS設(shè)置IME和遠(yuǎn)東語言支持選項。EM_SETTEXTMODE設(shè)置文本模式或者Undo級別。EM_SETUNDOLIMIT設(shè)置Undo隊列的最大動作數(shù)目。EM_STOPGROUPTYPING終止當(dāng)前Undo動作的連續(xù)鍵入動作的組合。?RichEdit2.0包含以下新的結(jié)構(gòu):消息描述CHARFORMAT2包含字符格式信息。PARAFORMAT2包含段落格式屬性。?RichEdit2.0不支持以下這些在亞洲語言版本的RichEdit1.0中支持的消息:EM_CONVPOSITIONEM_GETIMECOLOREM_GETIMEOPTIONSEM_GETPUNCTUATIONEM_GETWORDWRAPMODEEM_SETIMECOLOREM_SETIMEOPTIONSEM_SETPUNCTUATIONEM_SETWORDWRAPMODE2.2
創(chuàng)建RichEdit控件可用通過CreateWindowEx函數(shù)中指定RichEdit窗體類來創(chuàng)建一個RichEdit控件。如果使用1.0版本(RICHED32.DLL,窗體類參數(shù)應(yīng)該為“RichEdit”。如果采用2.0版本(RICHED20.DLL,窗體類參數(shù)應(yīng)該為“RICHEDIT_CLASS”。RichEdit控件支持大部分的Edit控件采用的窗體樣式,同時也支持一些額外的樣式。你如果希望控件中的文本支持不止一行的話就應(yīng)該給出ES_MULTILINE窗體樣式。2.3文本格式應(yīng)用程序可以通過給RichEdit控件發(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ù)文本,RichEdit控件將發(fā)送EN_PROTECTED通知到其父窗口,讓其父窗體決定是否允許或者拒絕修改。為了接收該通知,你必須使用EM_SETEVENTMASK消息來啟用它。前景色是一個字符屬性,但是背景色是一個RichText控件屬性。要設(shè)置背景色,請采用EM_SETBKGNDCOLOR消息。
2.4RichEdit控件中的當(dāng)前選擇內(nèi)容用戶可以在RichEdit控件中通過鼠標(biāo)和鍵盤來選擇文本。當(dāng)前選擇內(nèi)容指的是選中字符的范圍,或者表示沒有字符選中時的插入點位置。應(yīng)用程序可以獲取選中內(nèi)容的相關(guān)信息,設(shè)置當(dāng)前選中內(nèi)容,決定當(dāng)前選中內(nèi)容何時改變,顯示或者隱藏當(dāng)前高亮顯示的選中內(nèi)容等。確定RichEdit控件中的當(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)信息。RichEdit控件只有在你通過EM_SETEVENTMASK消息開啟它之后才會發(fā)送該通知。默認(rèn)情況下,RichEdit控件在獲取和失去焦點時將開啟和隱藏選中文本的高亮顯示。你可以通過EM_HIDESELECTION消息在任何時候開啟或者隱藏選中區(qū)域的高亮顯示。例如,某個應(yīng)用程序可能提供一個查找對話框用于在RichEdit控件中查找文本,這種情況下就必須使用EM_HIDESELECTION消息來保持選中文本的高亮顯示。與Edit控件一樣,你可以使用ES_NOHIDESEL窗體樣式來防止RichEdit控件在失去焦點時隱藏選中區(qū)域的高亮顯示。你也可以在RichEdit控件創(chuàng)建之后使用EM_HIDESELECTION消息來改變窗體的ES_NOHIDESEL樣式。
獲取和設(shè)置當(dāng)前選中內(nèi)容使用EM_GETSEL和EM_SETSELEdit控件消息,而非EM_EXGETSEL和EM_EXSETSEL消息。EM_GETSEL消息將兩個16位字符索引壓縮為它的32位返回值,因此,僅僅適用于選中區(qū)域的前64K字節(jié)。然而,一個RichEdit控件不可能包含超過32K字節(jié)的文本,除非你使用EM_EXLIMITTEXT消息擴(kuò)展了這個限制。對于選中文本中超過前64K字節(jié)的文本,EM_GETSEL消息將返回-1。2.5RichEdit文本操作應(yīng)用程序可以發(fā)送消息來獲取或者查找RichEdit控件中的文本。你既可以獲取選中區(qū)域的文本也可以獲取給定范圍的文本。獲取RichEdit控件中的選中文本,使用EM_GETSELTEXT消息。文本將被拷貝到指定字符數(shù)組中。你必須確保數(shù)組大小足以容納選中文本再加上一個終止NULL字符。獲取給定范圍的文本,使用EM_GETTEXTRANGE消息。該消息將使用TEXTRANGE結(jié)構(gòu),用于描述需要獲得的文本范圍以及用于獲取該文本的字符數(shù)組指針。在這里,同樣的,你必須確保數(shù)組大小足以容納選中文本再加上一個終止NULL字符。
你可以使用EM_FINDTEXT消息在一個RichEdit控件中查找字符串。該消息將使用結(jié)構(gòu),用于描述文本查找范圍及需要查找的字符串。你也可以指定諸如是否區(qū)分大小寫等搜索選項。2.6斷字與斷行RichEdit控件調(diào)用叫做“斷字處理過程”的函數(shù)來查找單詞間分隔符以及判斷何處可以換行。控件在執(zhí)行自動換行操作時以及處理Ctrl+左箭頭和Ctrl+右箭頭的組合鍵時將利用這些信息。應(yīng)用程序可以通過向RichEdit控件發(fā)送消息來替換默認(rèn)的“斷字處理過程”,獲取斷字信息,以及判斷一個給定字符屬于哪一行。RichEdit控件的斷字處理過程與Edit控件相似,但是它擁有更多能力。兩種控件的斷字處理過程均可以識別一個字符是否是一個分隔符,并且能夠在找到給定位置的前一個或者后一個字分隔符。分隔符指的是一個標(biāo)志單詞結(jié)束的字符,比如空格。在Edit控件中,斷字只出現(xiàn)在分隔符之后。RichEdit控件的斷字處理過程同時將字符組合為字符類,由到0x00的0x0F值來標(biāo)識。斷字可以出現(xiàn)在分隔符之后或者在不同類的字符之間。因此,在字符串“WIN.COM”中,由于字母數(shù)字和標(biāo)點屬于不同類別,斷字程序?qū)⒄业絻蓚€字分隔符。一個字符類別可以由0個或者更多的字分隔符標(biāo)志位組成一個8位的值。當(dāng)執(zhí)行自動換行操作時,RichEdit控件使用這些分隔符標(biāo)志位來決定何處可以換行。有如下這些字分隔標(biāo)志位:WBF_BREAKAFTER字符后面可以換行。WBF_BREAKLINE該字符為一個分隔符。分隔符標(biāo)記單詞的結(jié)束。也可以在分隔符后換行。WBF_ISWHITE該字符為一個白空格字符。跟隨的白空格字符在換行時不包含在行長度中。WBF_BREAKAFTER表示允許在該字符后面折行,但是并不標(biāo)記單詞的結(jié)束,比如連字符-。你可以使用EM_SETWORDBREAKPROC消息來替換RichEdit控件的默認(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.7RichEdit剪貼板操作應(yīng)用程序可以粘貼剪貼板中內(nèi)容到一個RichEdit控件中,采用最佳可用剪貼板格式或者指定的剪貼板格式。你也可以決定是否一個RichEdit控件可以粘貼某種剪貼板格式。對于一個Edit控件而言,你可以使用WM_COPY或者WM_CUT消息來拷貝或者剪切當(dāng)前選中內(nèi)容。同樣的,你可以使用WM_PASTE消息將這些剪貼板內(nèi)容粘貼到一個RichEdit控件中??丶⒄迟N它所識別的第一個可用格式,這大概是最具描述性的格式。你可以使用EM_PASTESPECIAL消息來粘貼指定的剪貼板格式。這個消息對具有“特殊粘貼”命令的應(yīng)用程序很有用,該命令可以讓用戶選擇剪貼板格式。你可以使用EM_CANPASTE消息來決定控件是否識別某種指定的格式。你也可以使用EM_CANPASTE消息來決定RichEdit控件是否識別所有可用的剪貼板格式。該消息在處理WM_INITMENUPOPUP消息時很有用。應(yīng)用程序可以啟用或者屏蔽“粘貼”命令,取決于控件是否可以粘貼任一個可用類型。RichEdit控件注冊兩種剪貼板格式:“富文本格式(RTF”和一種叫做“RichEdit文本與對象”的格式。應(yīng)用程序可以使用RegisterClipboardFormat函數(shù)來注冊這些格式,其取值為CF_RTF與CF_RETEXTOBJ。2.8流(Stream你可以使用流(Stream向RichEdit控件傳入或者傳出數(shù)據(jù)。流由EDITSTREAM結(jié)構(gòu)所定義,該結(jié)構(gòu)描述一個緩沖區(qū)及一個應(yīng)用程序定義的回調(diào)函數(shù)。將數(shù)據(jù)讀入RichEdit控件(或者說,數(shù)據(jù)傳入,使用EM_STREAMIN消息??丶⒅貜?fù)調(diào)用應(yīng)用程序的回調(diào)函數(shù),該函數(shù)每次傳入數(shù)據(jù)的一部分到緩沖區(qū)中。保存RichEdit控件內(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打印你可以向RichEdit控件發(fā)送消息來將其輸出重定向到指定設(shè)備,比如打印機(jī)。你也可以指定一個用于RichText文本格式化的輸出設(shè)備。對于特殊設(shè)備而言,要格式化RichEdit控件中部分內(nèi)容,你可以使用EM_FORMATRANGE消息。FORMATRANGE結(jié)構(gòu)用于在該消息中描述需要格式化的文本范圍以及目標(biāo)設(shè)備的設(shè)備場景。在輸出設(shè)備文本格式化完成后,你可以使用EM_DISPLAYBAND消息將輸出發(fā)送至設(shè)備。通過反復(fù)使用EM_FORMATRANGE和EM_DISPLAYBAND消息,打印RichText控件內(nèi)容的應(yīng)用程序可以實現(xiàn)條帶化操作。(條帶化操作指的是將輸出分割為較小部分用于打印目的的操作。)你可以使用EM_SETTARGETDEVICE消息來指定一個用于RichText文本格式化的目標(biāo)設(shè)備。該消息對于WYSIWYG(所見即所得)模式非常有用,在該模式下應(yīng)用程序采用默認(rèn)打印機(jī)字體規(guī)格而非屏幕字體規(guī)格來定位文本。2.10無底的RichEdit控件應(yīng)用程序可以調(diào)整RichEdit控件的大小以便它總是與其內(nèi)容大小匹配。RichEdit控件支持這種所謂的“無底”特性,在任何時候若其內(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消息強制一個無底RichEdit控件發(fā)送EN_REQUESTRESIZE通知。該消息在處理WM_SIZE消息時很有用。為了接收EN_REQUESTRESIZE通知,你必須采用EM_SETEVENTMASK消息來啟用它。2.11各種各樣的通知RichEdit控件父窗體可以處理通知,這些消息記錄影響該控件的事件。RichEdit控件支持所有Edit控件所使用的通知,同時具有幾個新增的通知。你可以通過設(shè)置它的事件掩碼(EventMask來判斷RichEdit控件發(fā)送到其父窗體的是何種通知。設(shè)置RichEdit控件的事件掩碼,采用EM_SETEVENTMASK消息。你可以使用EM_GETEVENTMASK消息來獲取當(dāng)前RichEdit控件的事件掩碼。RichEdit控件的父窗體可以通過處理EN_MSGFILTER通知來過濾所有的鍵盤和鼠標(biāo)輸入。父窗體可以防止鍵盤和鼠標(biāo)消息被處理,或者可以通過修改指定的MSGFILTER結(jié)構(gòu)來修改這些消息。應(yīng)用程序可以處理EN_PROTECTED通知,用以檢測何時用戶試圖修改受保護(hù)的文本。為了置某個范圍的文本為受保護(hù)狀態(tài),你可以設(shè)置受保護(hù)字符效果。獲取更多信息,請參閱文本格式。你可以通過處理EN_DROPFILES通知來允許用戶Drop一個文件到RichEdit控件中。指定的ENDROPFILES結(jié)構(gòu)包含了即將被Drop的文件的相關(guān)信息。2.11不支持的Edit控件的特性RichEdit控件支持絕大多數(shù)而并非全部的多行Edit控件的特性。本節(jié)列舉出RichEdit控件所不支持的Edit控件的消息和窗體樣式。下面的消息由Edit控件處理,而不被RichEdit控件所支持。不支持的消息注釋EM_FMTLINES不支持。EM_GETHANDLERichEdit控件并非將文本存儲為簡單的字符數(shù)組。EM_GETMARGINS不支持。EM_GETPASSWORDCHAR不支持ES_PASSWORD樣式。EM_SETHANDLERichEdit控件并非將文本存儲為簡單的字符數(shù)組。EM_SETMARGINS不支持。EM_SETPASSWORDCHAR不支持ES_PASSWORD樣式。EM_SETRECTNP不支持。EM_SETTABSTOPS采用EM_SETPARAFORMAT消息。WM_CTLCOLOR采用EM_SETBKGNDCOLOR消息。WM_GETFONT采用EM_GETCHARFORMAT消息。下面的窗體樣式用于多行Edit控件,而不被RichEdit控件所支持:ES_LOWERCASEES_PASSWORDES_OEMCONVERTES_UPPERCASE
三、RichEdit控件參考3.1總索引RichText控件相關(guān)的消息、通知和結(jié)構(gòu)體分組匯總?cè)缦?。部分API元素也用于Edit控件。?
格式化oCHARFORMAToCHARFORMAT2oEM_GETCHARFORMAToEM_GETPARAFORMAToEM_GETRECToEM_SETBKGNDCOLORoEM_SETCHARFORMAToEM_SETEVENTMASKoEM_SETPARAFORMAToEM_SETRECToPARAFORMAT2?
選中區(qū)域與Hit測試oCHARRANGEoEM_CHARFROMPOSoEM_EXGETSELoEM_EXSETSELoEM_GETFIRSTVISIBLELINEoEM_GETSELoEM_HIDESELECTIONoEM_POSFROMCHARoEM_SELECTIONTYPEoEM_SETSELoEN_SELCHANGEoSELCHANGE?
文本操作oEM_EXLIMITTEXToEM_FINDTEXToEM_GETLIMITTEXToEM_GETSELTEXToEM_GETTEXTRANGEoEM_REPLACESELoEM_SETLIMITTEXToFINDTEXToTEXTRANGE?
斷字與斷行oEM_EXLINEFROMCHARoEM_FINDWORDBREAKoEM_GETWORDBREAKPROCoEM_SETWORDBREAKPROCoEM_GETWORDBREAKPROCEXoEM_SETWORDBREAKPROCEXoEditWordBreakProcEx?
行與滾動條oEM_GETLINEoEM_GETLINECOUNToEM_GETTHUMBoEM_LINEFROMCHARoEM_LINEINDEXoEM_LINELENGTHoEM_LINESCROLLoEM_SCROLLoEM_SCROLLCARET?
編輯操作oEM_CANPASTEoEM_CANUNDOoEM_EMPTYUNDOBUFFERoEM_PASTESPECIALoEM_UNDO?
流oEDITSTREAMoEM_STREAMINoEM_STREAMOUT?
打印oEM_DISPLAYBANDoEM_FORMATRANGEoEM_SETTARGETDEVICEoFORMATRANGE?
無底RichEdit控件oEM_REQUESTRESIZEoEN_REQUESTRESIZEoREQRESIZE?
OLE接口oIRichEditOleoIRichEditOleCallback?
雜項oEM_GETEVENTMASKoEM_GETIMECOLORoEM_GETIMEOPTIONSoEM_GETMODIFYoEM_GETOPTIONSoEM_GETPUNCTUATIONoEM_GETWORDWRAPMODEoEM_SETEVENTMASKoEM_SETIMECOLORoEM_SETIMEOPTIONSoEM_SETEVENTMASKoEM_SETMODIFYoEM_SETREADONLYoEM_SETOPTIONSoEM_SETPUNCTUATIONoEM_SETWORDWRAPMODEoEN_CHANGEoEN_CORRECTTEXToEN_DROPFILESoEN_ERRSPACEoEN_HSCROLLoEN_IMECHANGEoEN_KILLFOCUSoEN_MAXTEXToEN_MSGFILTERoEN_OLEOPFAILEDoEN_PROTECTEDoEN_SAVECLIPBOARDoEN_SETFOCUSoEN_STOPNOUNDOoEN_UPDATEoEN_VSCROLLoWM_CONTEXTMENUoWM_CTLCOLOREDIToCOMPCOLORoENCORRECTTEXToENDROPFILESoENOLEOPFAILEDoENPROTECTEDoENSAVECLIPBOARDoPUNCTUATIONoMSGFILTER
3.2RichEdit回調(diào)函數(shù)下列回調(diào)函數(shù)是RichEdit控件所特有的:EditStreamCallbackEditWordBreakProcEx3.2.1EditStreamCallbackEditStreamCallback函數(shù)是一個應(yīng)用程序定義的回調(diào)函數(shù),用于EM_STREAMIN和EM_STREAMOUT消息。它用于將數(shù)據(jù)傳入或者傳出一個RichEdit控件。EDITSTREAMCALLBACK類型定義了一個指向該回調(diào)函數(shù)的指針。EditStreamCallback是一個用于該應(yīng)用程序定義的函數(shù)名的占位符。DWORDCALLBACKEditStreamCallback(DWORDdwCookie,//application-definedvalueLPBYTEpbBuff,//緩沖區(qū)指針LONGcb,//讀或?qū)懙淖止?jié)數(shù)LONG*pcb//實際傳輸?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ū),再傳入RichEdit控件。對于流出(寫)操作,緩沖區(qū)包含從控件中讀取的數(shù)據(jù),回調(diào)函數(shù)負(fù)責(zé)將其寫入存儲器中。cb指出讀取和寫入的字節(jié)數(shù)。pcb一個變量的指針,回調(diào)函數(shù)將設(shè)置該變量的值為實際讀取或?qū)懭氲淖止?jié)數(shù)。返回值回調(diào)函數(shù)返回0表示成功。.回調(diào)函數(shù)返回非0值表示發(fā)生錯誤。一旦發(fā)生錯誤,讀寫操作將終止,RichEdit控件將放棄pbBuff緩沖區(qū)中的任何數(shù)據(jù)。如果一個回調(diào)函數(shù)返回一個非0值,RichEdit控件將采用EDITSTREAM結(jié)構(gòu)的dwError成員將該值傳回應(yīng)用程序。備注當(dāng)你發(fā)送EM_STREAMIN和EM_STREAMOUT消息到一個RichEdit控件時,需要為EDITSTREAM結(jié)構(gòu)的pfnCallback成員指定一個EditStreamCallback函數(shù)指針。RichEdit控件將不斷調(diào)用該函數(shù)來輸出或者輸入數(shù)據(jù)。當(dāng)你發(fā)送EM_STREAMIN和EM_STREAMOUT消息時,你需要給出一個EDITSTREAM結(jié)構(gòu)的dwCookie成員的值。RichEdit控件使用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ā)生錯誤,該錯誤拒絕RichEdit控件數(shù)據(jù)的傳出或者傳入。例如內(nèi)存溢出狀態(tài),系統(tǒng)函數(shù)失敗,或者讀取緩沖區(qū)包含一個無效字符等。?對于一個流入操作,RTF代碼包含表示一個RTF塊結(jié)束的數(shù)據(jù)。?對于一個單行編輯控件的流入操作,回調(diào)函數(shù)讀取到一個CRLF。3.2.2EditWordBreakProcExEditWordBreakProcEx函數(shù)是一個應(yīng)用程序定義的回調(diào)函數(shù),用于EM_SETWORDBREAKPROCEX消息。它決定字符在某段給定文本中的字分隔符的字符索引,或者是字符類和字分隔符標(biāo)志位。EDITWORDBREAKPROCEX類型定義了一個回調(diào)函數(shù)的指針。EditWordBreakProcEx是一個應(yīng)用程序定義的函數(shù)名的占位符。LONGEditWordBreakProcEx(char*pchText,LONGcchText,BYTEbCharSet,INTcode;參數(shù)pchText當(dāng)前位置的文本的指針。如果code指定要向左移動,則文本為元素pchText[-1]到pchText[-cchText]的文本,pchText[0]未定義。對于其他所有操作,文本指的是pchText[0]到pchText[cchText-1]的文本。cchText由code指定的搜索方向上的緩沖區(qū)中的字符數(shù)。bCharSet文本的字符集。code所執(zhí)行的斷字動作??捎玫娜≈涤蒃M_FINDWORDBREAK消息的code參數(shù)所描述。返回值返回字母分隔符的字符索引值,除非code參數(shù)是WB_CLASSIFY和WB_ISDELIMITER值。備注應(yīng)用程序必須安裝回調(diào)函數(shù),方法是在EM_SETWORDBREAKPROCEX消息中給出回調(diào)函數(shù)的地址。RichEdit控件SDK參考手冊-2默認(rèn)分類2008-12-1701:02:45閱讀105評論0字號:大中小3.3RichEdit結(jié)構(gòu)體下列結(jié)構(gòu)體用于RichEdit控件:CHARFORMATCHARFORMAT2CHARRANGECOMPCOLOREDITSTREAMENCORRECTTEXTENDROPFILESENLINKENOLEOPFAILEDENPROTECTEDENSAVECLIPBOARDFINDTEXTFINDTEXTEXFORMATRANGEMSGFILTERPARAFORMATPARAFORMAT2PUNCTUATIONREOBJECTREPASTESPECIALREQRESIZESELCHANGETEXTRANGE3.4RichEdit消息以下消息由RichEdit控件所獨有:EM_AUTOURLDETECTEM_CANPASTEEM_CANREDOEM_DISPLAYBANDEM_EXGETSELEM_EXLIMITTEXTEM_EXLINEFROMCHAREM_EXSETSELEM_FINDTEXTEM_FINDTEXTEXEM_FINDWORDBREAKEM_FORMATRANGEEM_GETCHARFORMATEM_GETEVENTMASKEM_GETIMECOLOREM_GETIMECOMPMODEEM_GETIMEOPTIONSEM_GETLANGOPTIONSEM_GETOLEINTERFACEEM_GETOPTIONSEM_GETPARAFORMATEM_GETPUNCTUATIONEM_GETREDONAMEEM_GETSELTEXTEM_GETTEXTMODEEM_GETTEXTRANGEEM_GETUNDONAMEEM_GETWORDBREAKPROCEXEM_GETWORDWRAPMODEEM_HIDESELECTIONEM_PASTESPECIALEM_REDOEM_REQUESTRESIZEEM_SELECTIONTYPEEM_SETBKGNDCOLOREM_SETCHARFORMATEM_SETEVENTMASKEM_SETIMECOLOREM_SETIMEOPTIONSEM_SETLANGOPTIONSEM_SETOLECALLBACKEM_SETOPTIONSEM_SETPARAFORMATEM_SETPUNCTUATIONEM_SETTARGETDEVICEEM_SETTEXTMODEEM_SETUNDOLIMITEM_SETWORDBREAKPROCEXEM_SETWORDWRAPMODEEM_STOPGROUPTYPINGEM_STREAMINEM_STREAMOUTWM_CONTEXTMENU3.5RichEdit通知RichEdit控件支持絕大多數(shù)的Edit控件所使用的通知,同時增加了如下的通知。一個RichEdit控件只有在使用EM_SETEVENTMASK消息啟用了它之后才能發(fā)送下面的通知。EN_CORRECTTEXTEN_DROPFILESEN_IMECHANGEEN_LINKEN_MSGFILTEREN_OLEOPFAILEDEN_PROTECTEDEN_REQUESTRESIZEEN_SAVECLIPBOARDEN_SELCHANGEEN_STOPNOUNDO3.6RichEditOLE接口RichEdit控件支持由OLE所定義的客戶端的支持。該控件為大多數(shù)的OLE客戶端提供完全的支持。它不支持鏈接到自身內(nèi)容??蛻舳素?fù)責(zé)處理對話框和錯誤消息、OLE對象的存儲處理,以及文檔和應(yīng)用程序窗體級的實時激活支持。客戶端可以使用EM_GETOLEINTERFACE消息從RichEdit控件獲取一個IRichEditOle接口,該接口允許它控制OLE對象??蛻舳耸褂肊M_SETOLECALLBACK消息注冊一個IRichEditOleCallback接口,控件將使用它獲取所需接口和存儲。下列OLE接口用于RichEdit控件:IRichEditOleIRichEditOleCallback3.6.1IRichEditOle指定用于RichEdit控件執(zhí)行OLE相關(guān)操作的接口。IRichEditOle接口有下列方法:方法列表IUnknown方法描述QueryInterface返回支持的接口的指針。AddRef增加引用計數(shù)。Release減少引用計數(shù)。
IRichEditOle方法描述GetClientSite在創(chuàng)建一個新對象時獲取一個可用的IOleClientSite接口。GetObjectCount獲取RichEdit控件中包含的對象數(shù)目。GetLinkCount獲取RichEdit控件中鏈接的對象數(shù)目。GetObject返回RichEdit控件中一個REOBJECT結(jié)構(gòu)描述的對象信息。pInsertObject將一個對象插入到RichEdit控件中。pConvertObject將一個對象轉(zhuǎn)換為一個新類型。pActivateAs卸載屬于舊類的對象,告訴OLE將其看做新類對象,然后重新調(diào)入這些對象。pSetHostNames當(dāng)對象插入到RichEdit控件中時,設(shè)置一個“HostNames”給該對象。pSetLinkAvailable設(shè)置對象標(biāo)志位中的可用鏈接位的值。pSetDvaspect設(shè)置RichEdit控件用于繪制一個對象的特征。pHandsOffStorage告訴RichEdit控件釋放其指定對象相關(guān)的訪問存儲器接口。pSaveCompleted告訴RichEdit控件最近的保存操作已經(jīng)完畢,應(yīng)該繼續(xù)存儲該對象至不同存儲器。pInPlaceDeactivate告訴RichEdit控件立即使當(dāng)前激活的對象處于非激活狀態(tài)。pContextSensitiveHelp告訴RichEdit控件進(jìn)入或者退出上下文相關(guān)幫助模式。pGetClipboardData獲取一個剪貼板對象,用于Edit控件的某一區(qū)域。pImportDataObject導(dǎo)入一個剪貼板對象至RichEdit控件,替換當(dāng)前選中的內(nèi)容。3.6.2IRichEditOleCallback指定一個用于RichEdit控件從客戶端獲取OLE相關(guān)信息的接口。RichEdit控件的客戶端負(fù)責(zé)實現(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通知某一對象將在RichEdit中被刪除。QueryAcceptData訪問一個粘貼或者拖拽,以決定是否其粘貼/拖拽的數(shù)據(jù)應(yīng)該被接受。ContextSensitiveHelp告訴應(yīng)用程序應(yīng)該進(jìn)入或者退出上下文相關(guān)幫助模式。GetClipboardData允許客戶端支持其自身剪貼板對象。GetDragDropEffect允許客戶端指定其拖放操作的執(zhí)行結(jié)果。GetContextMenu在一個鼠標(biāo)右鍵按下事件中,詢問應(yīng)用程序提供一個上下文菜單。3.7RichEdit枚舉類型下列枚舉類型用于RichEdit控件:TEXTMODEUNDONAMEID3.7.1TEXTMODETEXTMODE枚舉類型包含用于表示RichEdit控件的文本模式的值。EM_SETTEXTMODE和EM_GETTEXTMODEm消息將使用這個枚舉類型。typedefenumtagTextMode{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)RichEdit功能。為默認(rèn)設(shè)置。TM_SINGLELEVELUN
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 數(shù)學(xué)解題技巧與方法
- 2025版深圳租賃汽車租賃期限及責(zé)任劃分合同2篇
- 2025版消防系統(tǒng)設(shè)計與施工合同模板3篇
- 應(yīng)急預(yù)案的執(zhí)行和改進(jìn)
- 電力水利行業(yè)技術(shù)升級建議
- 男科護(hù)理工作總結(jié)
- 金融行業(yè)薪酬福利設(shè)計總結(jié)
- 二零二五年度個人之間生活費用借款合同2篇
- 小組合作學(xué)習(xí)在考試中的應(yīng)用
- 二零二五年度公共設(shè)施防水保養(yǎng)合同4篇
- Unit 6 Beautiful landscapes Integration說課稿 - 2024-2025學(xué)年譯林版英語七年級下冊
- 測繪學(xué)基礎(chǔ)知識單選題100道及答案解析
- 2024年國家焊工職業(yè)技能理論考試題庫(含答案)
- 特魯索綜合征
- 2024年山東省泰安市高考語文一模試卷
- TCL任職資格體系資料HR
- 《中國古代寓言》導(dǎo)讀(課件)2023-2024學(xué)年統(tǒng)編版語文三年級下冊
- 五年級上冊計算題大全1000題帶答案
- 工程建設(shè)行業(yè)標(biāo)準(zhǔn)內(nèi)置保溫現(xiàn)澆混凝土復(fù)合剪力墻技術(shù)規(guī)程
- 屋面細(xì)石混凝土保護(hù)層施工方案及方法
- 110kv各類型變壓器的計算單
評論
0/150
提交評論