鄒 溪, 董險(xiǎn)峰
(吉林大學(xué) 數(shù)學(xué)學(xué)院, 長(zhǎng)春 130012)
教學(xué)網(wǎng)絡(luò)經(jīng)過(guò)幾年的快速發(fā)展和完善[1], 已形成開(kāi)放式的多媒體教學(xué)平臺(tái)[2]。在這些平臺(tái)中, 大多數(shù)解決的是網(wǎng)絡(luò)教學(xué)問(wèn)題, 而遠(yuǎn)程作業(yè)提交和批注的系統(tǒng)卻很少。筆者設(shè)計(jì)的電子課業(yè)手寫(xiě)批注系統(tǒng)就是用書(shū)寫(xiě)板、 手寫(xiě)屏等手寫(xiě)指點(diǎn)設(shè)備對(duì)其格式兼容的電子報(bào)告、 作業(yè)進(jìn)行標(biāo)注的系統(tǒng)。
該系統(tǒng)不僅填補(bǔ)了網(wǎng)絡(luò)教學(xué)中遠(yuǎn)程作業(yè)批改的空白, 而且不失傳統(tǒng)紙質(zhì)批改“見(jiàn)字如面”的親切感。同時(shí)也為當(dāng)今社會(huì)倡導(dǎo)的低碳辦學(xué)提供了可貴的嘗試。
在電子課業(yè)手寫(xiě)批注系統(tǒng)中, 標(biāo)注是指使用手寫(xiě)指點(diǎn)設(shè)備對(duì)文檔的圈閱、 標(biāo)記、 附注和涂抹等處理的過(guò)程。其中手寫(xiě)指點(diǎn)設(shè)備包括書(shū)寫(xiě)板、 手寫(xiě)屏、 鼠標(biāo)和軌跡球等計(jì)算機(jī)外部設(shè)備。
首先, 用RTF(Rich Text Format)控件以富文本格式的方式打開(kāi)Word文檔, 同時(shí)把Word的原文檔顯示在窗體中。
然后, 將Windows消息的處理方法攔截, 并處理手寫(xiě)指點(diǎn)設(shè)備等消息, 用API(Application Programming Interface)函數(shù)自定義坐標(biāo)系, 在RichTextBox場(chǎng)景[3]上批注, 保存在輔助文件中。
當(dāng)再次打開(kāi)此文檔時(shí), 讀取這些信息, 繪制出批注筆跡; 同時(shí)顯示批注筆跡的詳細(xì)信息(批注人、 時(shí)間等)。系統(tǒng)流程如圖1所示。
圖1 系統(tǒng)流程圖
運(yùn)用富文本格式(RTF: Rich Text Format)打開(kāi)(或創(chuàng)建)包含圖片、 表格、 數(shù)學(xué)公式的文檔。RTF是由微軟公司開(kāi)發(fā)的跨平臺(tái)文檔格式[4], 有很好的兼容性, 是通用的文件格式。
其基本元素由正文(Text)、 控制字(Control Word)、 控制符號(hào)(Control Symbol)和群組(Group)組成。
控制字是一種特定格式的命令, RTF用它作為正文格式的控制代碼, 是以反斜杠()開(kāi)頭的小寫(xiě)字母序列, 以定界符標(biāo)志一個(gè)RTF控制字的結(jié)束。
控制符號(hào)由反斜杠后跟一個(gè)單獨(dú)的非字母的字符表示一個(gè)特定的符號(hào)。
群組是大括號(hào)({})括起來(lái)的正文和控制字或控制符號(hào)組成。每個(gè)群組描述了由其修飾的正文和正文的各種屬性。
在此基礎(chǔ)上, 分離RTF控制字與正文、 分析RTF控制字語(yǔ)法、 翻譯控制字語(yǔ)義, 從而實(shí)現(xiàn)RTF閱讀器的主要功能。
該系統(tǒng)同時(shí)打開(kāi)兩個(gè)窗體(見(jiàn)圖2)。圖2a是RTF文本窗體, 用于手寫(xiě)留痕批注; 圖2b是DOC文本窗體, 可依據(jù)左側(cè)的批注內(nèi)容編輯原始文本。
a RTF文本窗體 b DOC文本窗體
由于Windows是事件驅(qū)動(dòng)的機(jī)制, 整個(gè)系統(tǒng)通過(guò)消息傳遞實(shí)現(xiàn)。其中有一個(gè)非常重要的系統(tǒng)接口----鉤子(Hook)[5], 它可攔截、 處理傳送給其他應(yīng)用程序的消息, 實(shí)現(xiàn)普通應(yīng)用程序無(wú)法完成的功能。
鉤子可監(jiān)視系統(tǒng)或進(jìn)程中的各種事件消息, 截獲發(fā)往目標(biāo)窗口的消息并進(jìn)行處理。筆者在該系統(tǒng)中安裝了自定義的鉤子, 監(jiān)視鍵盤(pán)、 鼠標(biāo)和滾動(dòng)條等。
當(dāng)窗體發(fā)生縮放、 滾動(dòng)時(shí), 都將觸發(fā)窗體的重繪事件[6]。
1) Paint事件: 在一個(gè)窗體被移動(dòng)或放大后或在一個(gè)覆蓋該對(duì)象的窗體被移開(kāi)后, 該窗體部分或全部暴露時(shí), Paint事件發(fā)生, 窗體的AutoRedraw屬性被設(shè)置為T(mén)rue, 系統(tǒng)重繪。
2) Resize事件: 當(dāng)窗體第1次顯示或窗體的狀態(tài)改變時(shí), 觸發(fā)Resize事件, 如對(duì)窗體進(jìn)行最大化、 最小化、 還原、 被鼠標(biāo)拖動(dòng)進(jìn)行放大、 縮小操作。
3) 鍵盤(pán)事件: 在窗體上操作鍵盤(pán)時(shí), 將會(huì)觸發(fā)KeyDown、 KeyUp、 KeyPress等鍵盤(pán)相關(guān)事件。
4) 鼠標(biāo)事件: 在窗體上移動(dòng)鼠標(biāo)時(shí), 將觸發(fā)MouseMove事件, 按下鼠標(biāo)時(shí)將觸發(fā)MouseDown事件, 松開(kāi)鼠標(biāo)時(shí), 將觸發(fā)MouseUp事件。
依據(jù)這些消息, 批注層留痕也需要被重繪。
將創(chuàng)建的富文本稱為文本層(或底層); 同時(shí)定義(多個(gè))透明的圖層, 稱為批注層。
手寫(xiě)批注是在批注層上的反饋式書(shū)寫(xiě)運(yùn)動(dòng), 利用手寫(xiě)輸入設(shè)備(如wacom Intuos3手寫(xiě)板, 采樣頻率為200點(diǎn)/s), 可以全程采集手寫(xiě)批注過(guò)程中的x,y,t等信息。
但意外斷筆等因素會(huì)導(dǎo)致手寫(xiě)批注在空間和時(shí)間上存在一定的漂移和形變, 系統(tǒng)有效地利用了手寫(xiě)批注的時(shí)序連續(xù)性和局部相關(guān)性[7], 實(shí)現(xiàn)批注筆畫(huà)的流暢[8]。
系統(tǒng)運(yùn)用API函數(shù)將文本層和(多層)批注層建立在同一坐標(biāo)系內(nèi), 沿Z軸方向?qū)⑺鼈冞壿嫰B加。當(dāng)文本層移動(dòng)、 滾動(dòng)和縮放時(shí), 批注層與其聯(lián)動(dòng), 步調(diào)一致, 便形成了留痕效果(見(jiàn)圖3)。
圖3 文本層與批注層
在窗體的大小和位置改變時(shí), 系統(tǒng)需要重繪窗體上的批注留痕(見(jiàn)圖4)。
圖4 窗體的縮放與滾動(dòng)
手寫(xiě)批注是由筆畫(huà)的集合組成的, 對(duì)每一筆畫(huà)都有其各自的屬性。按照筆畫(huà)原本的屬性存儲(chǔ)筆畫(huà)也是保證筆畫(huà)被完整再次重繪的前提。
批注筆畫(huà)可看成是一條條的直線和曲線, 每個(gè)點(diǎn)并不是絕對(duì)隨機(jī)分布的, 而是在一定范圍內(nèi)有一定走勢(shì), 用標(biāo)量表示位置, 用矢量表示方向。這種特征決定了其重繪方法和存儲(chǔ)結(jié)構(gòu), 即矢量圖形。它與位圖圖形不同, 與分辨率無(wú)關(guān), 縮放到任意尺寸, 既不丟失細(xì)節(jié), 又不降低清晰度。
這樣, 窗體縮放到不同大小時(shí), 批注筆畫(huà)的形狀、 大小和位置等屬性也隨之改變, 但都不會(huì)影響批注筆畫(huà)的整體結(jié)構(gòu)。所以, 矢量方式成為批注筆畫(huà)重繪與存儲(chǔ)的最佳選擇。
1) 建立筆的特征: 可選擇筆的類(lèi)型, 筆的寬度, 筆的顏色等, 并可把筆的特征值存入文件。
2) 手寫(xiě)批注: 這是系統(tǒng)中最主要的部分。系統(tǒng)在消息監(jiān)視、 處理和繪制批注筆跡等動(dòng)作的支持下, 從手寫(xiě)指點(diǎn)設(shè)備接受批注信息, 并將批注留痕信息存于輔助文件中。
3) 結(jié)束批注: 確定不再監(jiān)視系統(tǒng)消息。
4) 批注保存: 保存批注的各種信息。
1) 監(jiān)視鼠標(biāo)消息: 包括鼠標(biāo)的按下、 移動(dòng)和抬起等。在按下的動(dòng)作中, 判斷鼠標(biāo)的位置是否在批注區(qū)域內(nèi), 若在, 設(shè)置自定義坐標(biāo)系統(tǒng)原點(diǎn); 若不在, 繼續(xù)監(jiān)視; 在鼠標(biāo)移動(dòng)的過(guò)程中, 首先判斷鼠標(biāo)是否在批注區(qū)域內(nèi), 根據(jù)結(jié)果改變鼠標(biāo)的形狀, 然后繪制出批注筆跡, 并把批注的各種信息保存于輔助文件中, 以供顯示批注時(shí)使用; 在鼠標(biāo)抬起的過(guò)程中, 設(shè)置標(biāo)志表明一個(gè)批注的結(jié)束和另一個(gè)批注的開(kāi)始。
2) 監(jiān)視滾動(dòng)條消息: 當(dāng)有滾動(dòng)條的消息發(fā)生時(shí), 首先通過(guò)自定義的API函數(shù)得到Thumb的位置, 然后設(shè)置自定義坐標(biāo)系統(tǒng)的原點(diǎn), 最后刷新并重新顯示批注留痕。
3) 監(jiān)視鍵盤(pán)消息: 監(jiān)視鍵盤(pán)各鍵的狀態(tài), 設(shè)置是否批注的標(biāo)志。
1) 判斷是否有批注筆跡: 如果有批注筆跡, 利用File System Object和API函數(shù)繪制出批注筆跡, 建立批注區(qū)域, 顯示批注筆跡和批注的詳細(xì)信息(批注人和批注日期)。在此過(guò)程中用到的函數(shù)有: MoveToEx(移動(dòng)坐標(biāo)原點(diǎn)到指定的點(diǎn)), LineTo(在兩點(diǎn)之間畫(huà)線), DptoLp(設(shè)備坐標(biāo)到邏輯坐標(biāo)的轉(zhuǎn)化)和SetViewportOrgEx(自定義坐標(biāo)系統(tǒng))等。
2) 批注顯示: 可根據(jù)批注人的權(quán)限, 選擇全部(或部分)批注層, 或指定人的批注留痕。
3) 顯示批注的詳細(xì)信息: 利用自制的VB(Visual Basic)控件顯示批注人和批注日期。
1) 識(shí)別身份: 確認(rèn)批注人的身份及權(quán)限, 確保系統(tǒng)的安全。
2) 新建文檔: 調(diào)用Word的新建對(duì)話框建立新的Word文檔。
3) 打開(kāi)文檔: 調(diào)用Word的打開(kāi)對(duì)話框打開(kāi)一個(gè)已經(jīng)存在的文檔, 為批注做準(zhǔn)備。
4) 編輯原文檔: 可對(duì)照批注筆跡修改原文檔, 修改后調(diào)用Word的另存為對(duì)話框保存原文件, 最后可刪除批注的所有信息。
該系統(tǒng)經(jīng)對(duì)350人次學(xué)生的電子作業(yè)進(jìn)行批注, 取得了很好效果, 在確保流暢顯示的基礎(chǔ)上, 形成以下指標(biāo):
1) A4滿版手寫(xiě)批注, 平均948 kByte/頁(yè), 可進(jìn)一步壓縮;
2) 最大打開(kāi)頁(yè)數(shù)20頁(yè)(A4幅面);
3) 最大批注層數(shù)量6層。
所描述的極限參數(shù)都在intel E5200、 1 GByte RAM、 Windows XP環(huán)境中得到, 不同機(jī)型配置有所不同。
該系統(tǒng)在遠(yuǎn)程作業(yè)批改和電子稿件評(píng)審中得到了很好的應(yīng)用, 對(duì)于教師, 改善或替代了傳統(tǒng)紙質(zhì)方式的批改。該系統(tǒng)可作為電子課業(yè)手寫(xiě)批注的公共平臺(tái), 具有很好的教學(xué)效果和推廣價(jià)值。與此同時(shí), 該系統(tǒng)在政府機(jī)關(guān), 可用于電子政務(wù)的公文扭轉(zhuǎn)[9]; 在工商企業(yè), 可用于電子商務(wù)的信息交流; 在衛(wèi)生醫(yī)療, 可用于電子病案[10]的真跡保留。未來(lái)還可引入云存儲(chǔ)系統(tǒng)[11], 通過(guò)網(wǎng)絡(luò)提供給用戶動(dòng)態(tài)資源, 得到授權(quán)的用戶可瀏覽使用這些資源, 實(shí)現(xiàn)資源共享。
參考文獻(xiàn):
[1]董險(xiǎn)峰, 宋廷貴. 實(shí)驗(yàn)教學(xué)網(wǎng)絡(luò)的管理與安全 [J]. 實(shí)驗(yàn)室研究與探索, 2007, 26(7): 40-42.
DONG Xian-feng, SONG Ting-gui. Management and Security of Experimental Education Network [J]. Research and Exploration in Laboratory, 2007, 26(7): 40-42.
[2]潘巧明, 任清褒, 胡偉儉. 地方性高校開(kāi)放實(shí)驗(yàn)室個(gè)性化服務(wù)的調(diào)研----以計(jì)算機(jī)基礎(chǔ)實(shí)驗(yàn)室開(kāi)放建設(shè)為例 [J]. 實(shí)驗(yàn)室研究與探索, 2010, 29(5): 79-83.
PAN Qiao-ming, REN Qing-bao, HU Wei-jian. Study on Individual Service of Local College Lab-Opening [J]. Research and Exploration in Laboratory, 2010, 29(5): 79-83.
[3]高春艷, 劉彬彬, 王斌. Visual Basic開(kāi)發(fā)技術(shù)大全 [M]. 北京: 人民郵電出版社, 2007.
GAO Chun-yan, LIU Bin-bin, WANG Bin. Visual Basic Development Techniques [M]. Beijing: Peoples’ Posts & Telecom Press, 2007.
[4]Microsoft Corp. Word 2007: Rich Text Format (RTF) Specification (Version 1.9.1, 2007) [M/OL]. [2010-11-11]. http://download.microsoft.com/download/2/f/5/2f599e18-07ee-4ec5-a1e7-f4e6a9423592/Word2007RTFSpec9.doc.
[5]潘景新. VB編程中使用鉤子技術(shù)實(shí)現(xiàn)程序窗口監(jiān)控 [J]. 計(jì)算機(jī)與現(xiàn)代化, 2009(10): 141-143.
PAN Jing-xin. Realization of Program Windows Monitor by Hook Technology in VB Program [J]. Computer and Modernization, 2009(10): 141-143.
[6]沈煒. Visual Basic編程從基礎(chǔ)到實(shí)踐 [M].陳克忠, 譯. 北京: 電子工業(yè)出版社, 2008.
SHEN Wei. Visual Basic Programming from the Basic to the Practice [M]. CHEN Ke-zhong Translation. Beijing: Publishing House of Electronics Industry, 2008.
[7]程開(kāi)東, 董險(xiǎn)峰, 馬駟良. 基于極角特征匹配的動(dòng)態(tài)簽名鑒別算法 [J]. 吉林大學(xué)學(xué)報(bào): 理學(xué)版, 2009, 47(5):1006-1012.
CHENG Kai-dong, DONG Xian-feng, MA Si-liang. Dynamic Signature Verification Algorithm Based on Polar Angle Matching [J]. Journal of Jilin University: Science Edition, 2009, 47(5): 1006-1012.
[8]董險(xiǎn)峰, 邢罡, 馬駟良. 相連字符的分割算法 [J]. 吉林大學(xué)學(xué)報(bào): 理學(xué)版, 2003, 41(1): 6-11.
DONG Xian-feng, XING Gang, MA Si-liang. Segmenting Method of Connective Digits [J]. Journal of Jilin University: Science Edition, 2003, 41(1): 6-11.
[9]董險(xiǎn)峰, 楊華, 謝偉. 網(wǎng)絡(luò)化辦公與電子文件批注 [J]. 現(xiàn)代情報(bào), 2006, 26(11): 207-208.
DONG Xian-feng, YANG Hua, XIE Wei. Notation Network Officeand Electronic File [J]. Journal of Modern Information, 2006, 26(11): 207-208.
[10]董險(xiǎn)峰. 醫(yī)院信息系統(tǒng)的設(shè)計(jì)與開(kāi)發(fā) [J]. 現(xiàn)代情報(bào), 2005, 25(1): 85-87.
DONG Xian-feng. Design and Development of Hospital Information System [J]. Journal of Modern Information, 2005, 25(1): 85-87.
[11]王林松, 劉德山, 郭瑾, 等. 公共云安全體系結(jié)構(gòu)設(shè)計(jì) [J]. 吉林大學(xué)學(xué)報(bào): 信息科學(xué)版, 2013, 31(2): 165-169.
WANG Lin-song, LIU De-shan, GUO Jin, et al. Design of Public Cloud Security Architecture [J]. Journal of Jilin University: Information Science Edition, 2013, 31(2): 165-169.