C#.net綜合性實驗——圖片瀏覽器的製作

一.實驗要求

(1) 參考現有圖片瀏覽軟件的功能,實現一個自己的圖片瀏覽器。

(2) 該圖片瀏覽器,至少完成以下功能:

l 文件操作:目錄打開,指定文件打開;

l 圖片顯示方式:正常,拉伸;

l 圖片旋轉操作;

l 圖片瀏覽功能:幻燈片演示;

(3) 界面美觀,操作方便。

(4)重點檢查:縮略圖效果(顯示方式、速度等);幻燈片效果;間傳遞文本信息、文件等功能。

二. 設計思路

        本次的課程設計,是做一個圖片瀏覽器,參考了Microsoft Office 2010 Picture Manager和WindowsEssential 照片庫的圖片瀏覽部分,根據使用這些軟件的用戶體驗,加入了自己一些覺得有用的功能。該軟件主要分爲4大部分,分別是本地路徑顯示,圖片顯示(目錄瀏覽和圖片瀏覽),這兩大功能的分別通過PathClass和ImageClass類實現;而菜單模塊和圖片功能模塊在MainForm(UI窗體)的代碼中實現。

        除了菜單模塊,其他3大模塊均採用了異步線程的功能。

1.本地路徑顯示

        爲了保持軟件使用過程的暢順與穩定,該功能使用了線程的異步動能,增加了委託,當軟件加載時,使用異步調用PathClass中的GetPathList方法得到,當獲取當前就緒的磁盤,再調用GetFilePathList獲取磁盤下當前用戶有權限訪問兩級的文件目錄。例如有一個路徑C:\A\B\C\D\E,第一次去的調用的時候只會調用獲取到A、B的兩級的目錄信息,當用戶展開A文件夾的時候,軟件會再次調用GetFilePathList獲取到A下的B、C兩級的目錄信息。軟件調用這兩個方法的使用都會使用異步線程調用,當異步線程執行完畢後,再調用UI線程(主線程)將目錄信息更新到本地路徑(PathTreeView)中。

/*在MainForm的構造方法中調用獲取本地路徑信息的方法*/
AsyncOpenDirectory();

/*MainForm中異步打開本地路徑的方法*/
public void AsyncOpenDirectory()
{
PathClass myPath = new PathClass();
//異步調用方法GetPathList
GetPathListDelegate gpld = new GetPathListDelegate(myPath.GetPathList);
//異步線程執行完後調用方法SetPathList
    IAsyncResult ar = gpld.BeginInvoke(new AsyncCallback(SetPathList), gpld);
}
/*異步線程執行完後調用的方法獲取異步線程返回的目錄信息*/
public void SetPathList(IAsyncResult ar)
{
    GetPathListDelegate gpld = (GetPathListDelegate)ar.AsyncState;
    TreeNode rootTreeNode = gpld.EndInvoke(ar);
    MyDelegate d = new MyDelegate(SetTreeView);
    this.BeginInvoke(d, rootTreeNode);//UI線程執行修改界面的本地路徑的目錄信息
}
/*修改界面的本地路徑的目錄信息*/
public void SetTreeView(TreeNode rootTreeNode)
{
    PathTreeView.Nodes.Add(rootTreeNode);
}

/*異步展開子目錄模塊*/
//聲明異步委託
public delegate void MyFileDelegate(TreeViewCancelEventArgs e, TreeNode fileTreeNode);
private void PathTreeView_BeforeExpand(object sender, TreeViewCancelEventArgs e)
{
    if (e.Node.Text.Length > 0)//在狀態欄上顯示提示“打開某某目錄”
    {
StatusLabel.Text = 
String.Format("{0}“{1}”", Properties.Resources.ExpandingString, e.Node.Text);
    }
   	PathClass myPath = new PathClass();
	//異步調用MainFormGetFilePathList方法
MainFormGetFilePathListDelegate gfpld = 
new MainFormGetFilePathListDelegate(MainFormGetFilePathList);
    IAsyncResult ar = gfpld.BeginInvoke(e, null, gfpld);
}
public void MainFormGetFilePathList(TreeViewCancelEventArgs e)
{
    PathClass myPath = new PathClass();

    if (e.Node.Name.Length > 0)
    {
TreeNodeCollection expandingTreeNode = e.Node.Nodes;
foreach (TreeNode x in expandingTreeNode)
{
    		if (x.Nodes.Count <= 0)//如果子目錄的文件夾數大於0則不重新更新文件目錄
    		{
TreeNode fileTreeNode = myPath.GetFilePathList(x.Name, 0);
MyFileDelegate myFileDelegate = new MyFileDelegate(SetFileTreeView);
this.Invoke(myFileDelegate,e,fileTreeNode); //UI線程更新該目錄信息
……
/*更新該目錄信息*/
public void SetFileTreeView(TreeViewCancelEventArgs e,TreeNode fileTreeNode)
{
……
}

/*PathClass.cs中的代碼*/
public delegate TreeNode GetPathListDelegate();//聲明異步線程的委託

public TreeNode GetPathList()//獲取就緒磁盤的前兩級目錄信息
{
    TreeNode RootTreeNode = new TreeNode();
……
RootTreeNode.Text = Properties.Resources.ComputerName;
DriveInfo[] Drivers = DriveInfo.GetDrives();
foreach (DriveInfo driver in Drivers)
{
    		if (driver.IsReady)//如果該磁盤就緒
    		{
TreeNode driverTreeNode = GetFilePathList(driver.Name, 0);
RootTreeNode.Nodes.Add(driverTreeNode);
……

//顯示子文件的文件夾
public TreeNode GetFilePathList(string parentPath, int pathDepth)
{
    TreeNode parentTreeNode = new TreeNode(parentPath);
    DirectoryInfo parentDir = new DirectoryInfo(parentPath);
    DirectoryInfo[] childDirs = parentDir.GetDirectories();

……
DirectorySecurity s = new DirectorySecurity(childDir.FullName, AccessControlSections.Access);
   			if (!s.AreAccessRulesProtected)//判斷是否權限訪問該目錄
    		{
if (pathDepth < 1)//訪問深度,如果還沒有到第二級就遞歸該方法獲取
{
    				TreeNode childNode =
 		GetFilePathList(childDir.FullName, pathDepth + 1);
    				parentTreeNode.Nodes.Add(childNode);
}
……

2.圖片瀏覽

        該功能主要分爲目錄瀏覽和圖片瀏覽兩個部分。該部分主要參照的對象爲Windows自帶的資源管理器(Explorer)並模仿手機顯示時的淡出特效。爲了實現更加炫酷的功能,本次綜合性實驗並沒有使用ListView和PictureBox等控件,而是使用了WebBrowser空間實現圖片的目錄瀏覽和圖片的原圖瀏覽。圖片的顯示內容主要是HTML,特效主要通過CSS和Javascript實現。爲了保證UI線程(主線程)穩定和暢順,這個模塊還是使用了異步線程功能。

/*在MainForm中的代碼*/
///
///目錄瀏覽模塊
/////判斷瀏覽器是否加載中,防止同時訪問多個網頁
private bool BrowserIsOk = false;//是否加載中的標識
//異步線程執行完,UI線程填充目錄瀏覽WebBrowser的委託聲明
public delegate void WriteFileOverDelegate(String innerHTML); 
//異步線程:文件夾被選中事件
private void PathTreeView_AfterSelect(object sender, TreeViewEventArgs e)
{
    if (e.Node.Name.Trim().Length > 0&&e.Node.Name.Trim()!=currentPath)
    {
currentPath = e.Node.Name.Trim();//修改全局變量“當前目錄”的路徑
if (BrowserIsOk)//當上一次目錄瀏覽加載完畢
{
    		BrowserIsOk = false;//上鎖
    		ImageClass myImage = new ImageClass();
			//異步讀入該目錄下的圖片信息:圖片絕對地址與圖片名稱
    		WriteFileDelegate wfg = new WriteFileDelegate(myImage.WriteFile);
			//異步線程完成後,回調函數讀入異步線程的返回值
    		IAsyncResult ar = 
wfg.BeginInvoke(e.Node.Name, new AsyncCallback(WriteFileOver), wfg);
}
    }
}
//異步線程返回值,並調用UI線程顯示
public void WriteFileOver(IAsyncResult ar)
{
    ……
}
//UI線程修改目錄瀏覽WebBrowser的內容
public void ChangeUri(string innerHTML)
{
SmallViewBrowser.Document.InvokeScript("PicMargin");//顯示特效
SmallViewBrowser.Document.Body.InnerHtml = innerHTML;
BrowserIsOk = true;//解鎖
}

///
/// 圖片瀏覽模塊
///
int CurrentPic = 0;//當前圖片的索引
string currentPath = System.IO.Directory.GetCurrentDirectory();//圖片當前目錄路徑
private bool BigBrowserIsOK = false;//圖片瀏覽WebBrowser是否就緒的標識
//圖片瀏覽WebBrowser是否就緒的監聽事件
private void BigImageWebBrowser_DocumentCompleted(object sender, 
WebBrowserDocumentCompletedEventArgs e)
//用戶點擊圖片事件
private void SmallViewBrowser_NewWindow(object sender, CancelEventArgs e)
{
    e.Cancel = true;//取消目錄瀏覽器中發生的事件
	//在圖片瀏覽WebBrowser中顯示圖片
    ShowBigPic(SmallViewBrowser.Document.ActiveElement.FirstChild.GetAttribute("src"),
SmallViewBrowser.Document.ActiveElement.FirstChild.GetAttribute("alt"));

	//獲取當前圖片的索引
    ……
}
//圖片切換事件
private void ShowBigPic(string url, string name)
{
    BigBrowserIsOK = false;//上鎖
    object[] myObject = new object[] { (object)url, (object)name };
	//在WebBrowser切換圖片
    BigImageWebBrowser.Document.InvokeScript("ChangePic", myObject);
    FunctionTab.SelectedIndex = 1;
    BigBrowserIsOK = true;//解鎖
}

/*圖片類ImageClass中的代碼*/
public delegate string WriteFileDelegate(string path);
//圖片類型的集合
HashSet<string> hashSet = new HashSet<string>();
public ImageClass()
{
    	hashSet.Add(Properties.Resources.JPGFileString);//jpg
……
}//增加圖片類型

//獲取Path目錄下所有圖片並組成HTML語言
public string WriteFile(string Path)
{
……
    int count = 0;
    StringBuilder imageHTML = new StringBuilder();
    DirectoryInfo imageFile = new DirectoryInfo(Path);
    FileSystemInfo[] imageInfo = imageFile.GetFileSystemInfos();
……

    foreach (FileSystemInfo x in imageInfo)
    {
if (IsPicture(x.FullName))//如果該文件是圖片
{
    		count++;
……
    		imageHTML.Append(x.Name);
……//組裝HTML代碼
……
    	if (count == 0)
    	{
imageHTML.Append("<p>該文件夾沒有圖片。</p>");
    	}
    return imageHTML.ToString();//返回HTML代碼
}catch(Exception ex){
    return "<h1>錯誤提示:</h1><hr><p>"+ex.Message+"</p>";
}//返回錯誤提示
}
//判斷文件類型,通過文件的前兩位判斷,防止打開錯誤後綴名的文件
//例如,就算任何文件改名爲*.jpg都會提示錯誤文件
//相反如果圖片文件修改過後續名,都能正常打開
public bool IsPicture(string filePath)//filePath是文件的完整路徑
{
……
FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read);
BinaryReader reader = new BinaryReader(fs);
string fileClass;
byte buffer;
byte[] b = new byte[2];
buffer = reader.ReadByte();
b[0] = buffer;
fileClass = buffer.ToString();
buffer = reader.ReadByte();
b[1] = buffer;
fileClass += buffer.ToString();
		
reader.Close();
fs.Close();
if (hashSet.Contains(fileClass))//判斷該文件類型是否在hashSet中
{
    		return true;
}
else
{
    		return false;
……

3.菜單模塊

         菜單模塊由4個部分組成:“開始”菜單、“地址欄”菜單、“打印”菜單和“關於”菜單。這些功能是參加其他圖片瀏覽器之後提取出來一些比較實用的功能。四個部分的功能有:打開文件、顯示/隱藏地址欄、刷新地址欄、打印/打印設置/打印語言和關於圖片庫。

///
///菜單->開始 模塊
///
//菜單->開始->打開文件
private void StartOpenFileItem_Click(object sender, EventArgs e)
{
    OpenFileDialog myDialog = new OpenFileDialog();
    if (myDialog.ShowDialog() == DialogResult.OK)//打開文件框
    {
string fileName = myDialog.SafeFileName;
string fullName = myDialog.FileName;
ImageClass myImage = new ImageClass();

if (myImage.IsPicture(fullName))//判斷選定的是否爲圖片
{
……
   			 ShowBigPic(fullName, fileName);//顯示圖片
}
else//提示選擇正確的圖片
{
    		MessageBox.Show("請打開正確的圖片格式", "提示", 
									System.Windows.Forms.MessageBoxButtons.OK);
……
//菜單->開始->退出
private void StartCloseItem_Click(object sender, EventArgs e)
{
    this.Close();
}
///
///菜單->地址欄 模塊
//菜單->地址欄->隱藏地址欄
private void HidePathItem_Click(object sender, EventArgs e)
……
HidePathItem.Text = "隱藏地址欄";
……
//菜單->地址欄->刷新地址欄
private void RefreshPath_Click(object sender, EventArgs e)
{
   ……//移除當前本地路徑的節點信息
    AsyncOpenDirectory();//異步獲得本地路徑節點信息
}
///
///菜單->打印 模塊
///
//菜單->打印->打印
private void PrintItem_Click(object sender, EventArgs e)
{
    WebBrowser myWB;
……//獲得當前選項卡
    myWB.Print();
}
//菜單->打印->打印設置
private void PrinterSettingItem_Click(object sender, EventArgs e)
……
    myWB.ShowPrintDialog();
	……
//菜單->打印->打印預覽
private void PrintPreviewItem_Click(object sender, EventArgs e)
……
    myWB.ShowPrintPreviewDialog();
……
       
///
///菜單->關於 模塊
///
//菜單->關於->關於
private void AboutItem_Click(object sender, EventArgs e)
{
    AboutForm myAboutForm = new AboutForm();
……
//菜單->關於->關於Windows
private void AboutWindows_Click(object sender, EventArgs e)
……
    System.Diagnostics.Process.Start(Properties.Resources.Winver);
……

4.圖片功能模塊

        圖片功能模塊包括了圖片縮放大小設置、旋轉角度設置、圖片切換設置。圖片縮放設置是通過修改WebBrowser的顯示比例(zoom值)實現的,可以通過拉動顯示比例的滾動條設置。而旋轉角度的設置則是通過JavaScript修改圖片樣式中的濾鏡的值實現,可以通過點擊向左/右旋轉90°的圖片或通過拉動旋轉角度的滾動條設置。而圖片切換則是利用JavaScript切換圖片的路徑實現,而通過點擊上/下一張圖片實現。

///
///圖片縮放模塊
///
//縮放控制
private int value1 = 100;//目錄瀏覽的縮放值
private int value2 = 100;//圖片瀏覽的縮放值
//圖片縮放值改變事件
private void ImageTrackBar_ValueChanged(object sender, EventArgs e)
{
    ImagePercent.Text = String.Format("{0}{1}%", 
Properties.Resources.ImagePercentTips, ImageTrackBar.Value);
    ChangeZoom();//改變瀏覽器顯示比例事件
}
//當鼠標滾動時,發生顯示比例縮小事件
private void MainForm_Scroll(object sender, ScrollEventArgs e)
{
    ImageTrackBar.Value--;
}
//目錄瀏覽和圖片瀏覽選項卡改變時,保存被切換的WebBrowser的縮放值
private void FunctionTab_SelectedIndexChanged(object sender, EventArgs e)
{
    if (FunctionTab.SelectedIndex == 0)
    {
value2 = ImageTrackBar.Value;
ImageTrackBar.Value = value1;
SmallViewBrowser.Focus();
    }
    else
    {
……
    }
    ChangeZoom();
}
//改變當前瀏覽器的縮放值
private void ChangeZoom()
{
    string zoom=
"zoom:" + Math.Round((double)ImageTrackBar.Value / 100, 2).ToString();
    if (FunctionTab.SelectedIndex == 0)
    {
//修改瀏覽器的顯示比例
SmallViewBrowser.Document.Body.Style = zoom;
SwapTrackBar.Visible = false;
SwapTipLabel.Visible = false;
    }
    else
    {
……
    }
}
///
///功能鍵模塊
///
//功能鍵提示語
private void FunctionPanel_MouseHover(object sender, EventArgs e)
{
    Label myLabel = (Label)sender;
    switch (myLabel.Name)
    {
case "Play"://當鼠標移動到“幻燈片播放圖片”時,顯示提示語
    		this.toolPlay.SetToolTip(Play, "幻燈片播放圖片");
    		break;
……
///
///圖片縮放角度模塊
///
//旋轉角度
private int SwapCount = 0;
//向左或向右旋轉90°
private void Swap_Click(object sender, EventArgs e)
{
    Label myLabel = (Label)sender;
    if (myLabel.Name == "SwapLeft")//計算向左旋轉角度
    {
SwapCount = (SwapCount + 4 - 1) % 4;
    }
    else
……
}
//旋轉值改變的時候,旋轉圖片
private void SwapTrackBar_ValueChanged(object sender, EventArgs e)
{
    SwapTipLabel.Text = String.Format("{0}{1}°", 
Properties.Resources.SwapTipString, SwapTrackBar.Value);
    object[] myobject = new object[1];
    myobject[0] = (object)(SwapTrackBar.Value.ToString());
	//在WebBrowser中旋轉圖片
    BigImageWebBrowser.Document.InvokeScript("SwapChange",myobject);
}
//切換圖片,下一張圖片或上一張圖片
private void NextPic_Click(object sender, EventArgs e)
{
……
ShowBigPic(SmallViewBrowser.Document.Images[CurrentPic].GetAttribute("src"),
       	SmallViewBrowser.Document.Images[CurrentPic].GetAttribute("alt"));
   ……
}

/*幻燈片播放模塊*/
//幻燈片播放
private void Play_Click(object sender, EventArgs e)
{
    Label myPanel = (Label)sender;
    if (myPanel.Name == "Play")//全屏顯示
    {
……
    }
    else//退出全屏
    {
……
    }
}
//計時器觸發切換圖片
private void PicDisplayTimer_Tick(object sender, EventArgs e)
{
    Label myLabel = new Label();
    myLabel.Name = "NextPic";
    NextPic_Click((object)myLabel, e);
}
//幻燈片播放速度設置
private void HowTimeFly_Scroll(object sender, EventArgs e)
{
    int value = 1000 + HowTimeFly.Value * 1000;
HowTimeFlyLabel.Text = String.Format("{0}{1}秒/張", 
Properties.Resources.HowTimeFlyString, value / 1000 - 1);
    PicDisplayTimer.Interval = value;
}
//鍵入“ESC”時退出幻燈片播放
private void MainForm_KeyPress(object sender, KeyPressEventArgs e)
{
……
myLabel.Name = "Pause";
Play_Click((object)myLabel, e);
……
}

//當軟件的大小改變的時候,改變圖片的顯示大小
private void BigImageWebBrowser_Resize(object sender, EventArgs e)
{
    BigImageWebBrowser.Document.InvokeScript("PicHeight");
}

三. 程序運行效果圖

        本次綜合實驗的生成的程序,是基於.Net Framework 4.0開發的,在Windows7和Windows8.x下順利地通過了測試。爲了保證軟件能夠正常地配置,使用了InstallShield2013對本程序進行了封裝。

        下面是在安裝了VirtualStudio 2013 Professional 和.Net Framework 4.5的Windows 7 x64 with sp1 環境下,程序的使用效果。


圖1 安裝“望晴圖片庫2014” 
        點擊“祥琳望晴 圖片庫2014 安裝包.exe”,如圖1所示。點擊“下一步”,完成安裝。如圖二所示,在安裝完畢後,會在桌面上顯示該軟件的快捷鏈接。

圖2 “祥琳望晴圖片庫2014”的快捷方式

圖3 “祥琳望晴圖片庫2014”的主界面

圖4圖片瀏覽選項卡

        雙擊快捷鏈接,就會顯示該軟件的主界面,如圖3所示。可以看到,軟件上方是開始菜單。界面中間左邊顯示的是本地路徑的節點信息,右邊則是顯示目錄瀏覽和圖片瀏覽的選項卡。界面底部則是狀態信息欄和調整顯示比例的滾動條。目錄瀏覽默認顯示的本軟件的簡單使用說明。而圖片瀏覽默認顯示“示例圖片”,如圖4所示。在圖片瀏覽選項卡中,顯示的還有圖片向左/右旋轉90°、上/下一張圖片、和播放圖片幻燈片的按鈕。


圖5 菜單欄中“開始”的功能

        點擊菜單欄的“開始”,可以看到有“打開文件”和“退出”兩個功能,如圖5所示。“打開文件”功能是通過Windows自帶的打開文件窗口打開圖片,選中圖片後,圖片會在圖片瀏覽的選項卡中顯示,而該圖片目錄下的所有圖片將會在目錄瀏覽的選項卡中顯
示。點擊“退出”功能則可以退出程序。

圖6 菜單欄中“地址欄”的功能

        點擊菜單欄的“地址欄”,可以看到有“刷新地址欄”和“隱藏地址欄”兩個功能,如圖6。點擊“刷新地址欄”,可以刷新本地路徑下的節點信息。點擊“隱藏地址欄”,可以隱藏地址欄,如圖7所示。


圖7 點擊“隱藏地址欄”功能後的界面效果

        點擊菜單欄的“打印”,可以看到有“打印”、打印設置”和“打印預覽”三個功能,如圖8。點擊“打印”,可以直接打印選中選項卡的內容。點擊“打印設置”,可以直接對打印進行設置。點擊“打印預覽”,可以對打印信息進行預覽,如圖9、10所示。


圖8 菜單欄中“打印”的功能


圖9 “打印預覽”目錄瀏覽截圖


圖10“打印預覽”圖片瀏覽截圖

        點擊菜單欄的“關於”,可以看到有“關於”本軟件的信息。點擊“關於祥琳望晴圖片庫2014”,可以查看本軟件的版本號等信息,如圖11所示。

圖11 關於“祥琳望晴 圖片庫2014”

        如圖12所示,在本地路徑下,展開“這臺電腦”,再依次展開“娛樂與文檔”、“圖片收藏”,點擊文件夾“WindowsVista”可以在“目錄瀏覽”的選項卡中顯示文件夾“WindowsVista”裏的所有圖片文件。用戶可以通過拉動該程序右下角的“顯示比例”滾動條,對“目錄瀏覽”顯示的圖片進行縮放顯示。如圖13所示,是將“顯示比例”滾動條拉到80%處,也就是將“目錄瀏覽”選項卡中的圖片縮小爲原先80%後的效果。相同地,在“圖片瀏覽”的選項卡中,也能使用同一條滾動條對“圖片瀏覽”選項卡中的圖片進行按比例縮放。值得一提的是,雖然兩個選項卡使用了同一條滾動條,但程序會在選項卡切換的時候分別記錄和還原每個卡選項上次的縮放記錄。也就是說,選項卡之間的縮放比例並不相互影響。例如用戶將“目錄瀏覽”的顯示比例調整爲80%,當切換到“圖片瀏覽”時,顯示比例仍未上次的顯示比例,設置“圖片瀏覽”的顯示比例爲110%。再次切換到“目錄瀏覽”,顯示比例將會仍爲80%。


圖12顯示比例爲100%下的“目錄瀏覽”


圖13 顯示比例爲80%下的“圖片瀏覽”

        在“目錄瀏覽”的選項卡中,選中任意一張圖片,程序會自動切換到“圖片瀏覽”的卡選項,並淡出顯示該圖片,如圖14所示。如圖14所示,與“目錄瀏覽”不同,“圖片瀏覽”多了5個功能鍵和1條滾動條,分別是:向左旋轉90°、上一張圖片、幻燈片播放圖片、下一張圖片、向右旋轉90°以及“旋轉角度”滾動條。點擊“上一張圖片”可以切換到圖片目錄下上一張圖片,點擊“下一張圖片”則可以切換到圖片目錄下下一張圖片。通過拉動旋轉角度,可以將“圖片瀏覽”選項卡中的圖片進行0~360°的任意旋轉,角度之間的最小值爲1°。如圖15所示,圖片旋轉270°的效果圖。可以在旋轉角度爲0的情況下,點擊1次向左旋轉90°實現,或者通過點擊3次向右旋轉90°實現,還可以拉動“旋轉角度”的滾動條到270°實現。


圖14 選中圖片並在“圖片瀏覽”中顯示


圖15旋轉圖片270°

        點擊播放幻燈片,程序將會全屏顯示,並播放圖片,如圖16所示。用戶通過拉動幻燈片底下的“播放速度”滾動條,改變幻燈片的播放速度。本程序的幻燈片播放的特效是隨機的,包括淡入、淡出、伸展進入和縮小退出等等。


圖16 幻燈片播放圖片






發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章