池研 朱軒晨 石菲
【摘要】隨著流技術的成熟和廣泛的應用,其優點我們有了深刻體會。但是,其不足之處也逐漸體現出來。SMIL正是針對目前流技術中的問題而提出來的。特別是在手機彩信內容的編制上,SMIL語言得到了廣泛的應用。不過一方面,現有的一些SMIL編輯器并不太好用。而另一方面,我們編制的彩信新聞格式相對比較固定,這非常有利于編寫程序自動創建。這篇文章就是基于上面的兩點,應用Office接口編程,實現了自動創建SMIL文件的目的。
【關鍵詞】SMIL語言;彩信新聞;Office編程
一、引言
棗莊日報社為適應新興媒體的發展需要,特別是掌媒所帶來巨大沖擊的情況下,開始籌辦手機報。當時只有編輯人員參加,后來由于省移動公司更換了發送平臺,使得原來的工作流程和方法都不再適用,而編輯人員沒能掌握新平臺的使用和制作,于是計算機工作人員也參加了進來。
我們使用的是山東移動168信息平臺的彩信新聞。這個平臺需要手工編制SMIL文件,這對于編輯人員來講是比較困難的,即使是計算機人員天天做同一件事也是非常繁瑣的。更何況每天必須在固定時間里發送到平臺上,這就要求我們不能用太多的時間來進行調試,同時還要根據每條新聞的字數計算出在手機上顯示的時間。當然,手工制作時顯示時間的控制只能是粗略的。這就使得有些短信息顯示的時間過長,不方便用戶的閱讀;而有些較長的信息由于顯示的時間過短,使得用戶沒有閱讀完就會自動跳到下一條新聞。為解決以上問題,我們使用VC++和Office編程技術編寫了一個把Word文件轉換成SMIL文件的程序,取名為WordToSmil。
二、制作流程
1.編輯Word文件
由編輯人員使用Word把每條新聞插入到空白表格中,而且必須是按照順序逐行插入,中間不準有空白行,表格的最后一行必須是空白行,表示彩信新聞到此為止。使用Word編輯稿件的好處是,編輯們對Word的使用比較熟練,而且用表格來組織稿件,其條目非常清晰,也能部分實現彩信新聞在手機上的顯示效果。以下是我們實際編輯完成的Word文件,當然這只是全部內容的很少一部分。
編輯完成的Word文件樣本
2.運行WordToSmil程序
運行WordToSmil后,屏幕上會顯示一個對話框,其中有四個按鈕和三個互斥鍵。首先打開Word文件按鈕,屏幕上會顯示一個標準的打開文件對話框,選擇上面的樣本文件。再選擇三個互斥鍵中的一個,慢速意味著每條信息的顯示的時間會長些,快速意味著每條信息的顯示的時間會短些,程序的缺省值是中速。最后按下生成SMIL文件按鈕,程序會自動地把每條信息按照順序生成一個一個文本文件,同時也生成了SMIL文件。以下是自動創建的SMIL文件樣本,這是在選擇了中速的情況下生成的。
3.發送到平臺
上面生成的文本文件和SMIL文件都自動保存在你打開的Word文件目錄下,現在需要把這些文本文件和SMIL文件用WinZip壓縮到一個文件中。然后打開瀏覽器,登錄到山東移動168信息平臺,選擇彩信新聞,填寫必要的內容,瀏覽選擇你剛生成的壓縮文件,發送出去即可。
三、程序的實現
在Office編程中經常用到的對象有:_Application、Documents、Selection、Range等等。實現這些對象的Visual C++類文件需要從Office提供的幾個類型庫中導入。他們的位置在Office安裝路徑下的Office目錄,其中Word2000的類型庫名為Msword9.olb。
1.建立工程
首先創建一個MFC AppWizard(EXE)工程,名稱為WordToSmil,在向導過程中選擇生成對話框。然后通過在View菜單中,選ClassWizard,選Automation選項卡,選Add Class,選擇From a TypeLibrary,選中Microsoft Office 2000類型庫:MSWORD9.OLB。選擇需要引入的類_Application、Documents、Range、Section、Sections、Selection。這樣我們需要的類就在msword9.h中定義了,只要包含這個頭文件就可以使用了。在WordToSmilDlg.cpp實現文件中加入下面幾行代碼:
#include"msword9.h";
int m_Speed=1;//這是個全局變量
CString fileName;//這也是個全局變量
2.設置對話框并添加消息處理函數
接受所有控制的缺省標識符,設置三個互斥鍵為一組,并為互斥鍵組指定一個數據成員m_Speed。在WordToSmil.cpp實現文件中加入下面一行代碼:
dlg.m_Speed=1;//這是個數據成員,互斥鍵缺省值為中速
接下來為每一個控制的BN_CLICKED消息定義一個消息處理函數,接受所有的缺省函數名。
3.為消息處理函數添加代碼
(一)消息處理函數OnButton1()
程序的大部分功能就是由這個函數完成的。它首先定義一些Word對象,然后啟動Word服務,實際打開Word文件,通過一個循環語句完成到文本文件和SMIL文件的轉換。
(二)消息處理函數OnButton2()
這個函數的功能只是獲取Word文件的路徑和文件名,實際的打開功能是由OnButton1()完成的。
(三)消息處理函數On OnRadio()
這三個函數只是完成簡單的給全局變量m_Speed賦值的功能,每個函數都要調用IsDlgButtonChecked()函數以保證互斥鍵已被選擇。
【參考文獻】
[1]掌握Microsoft Visual C++編程,熊璋等譯,電子工業出版社
[2]專家門診Visual C++開發答疑300問,肖紅衛編著,人民郵電出版社