• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            道。道。道

            安全特性不等于安全的特性

               :: 首頁 :: 聯系 :: 聚合  :: 管理

            常用鏈接

            搜索

            •  

            最新評論

              摘要: 本文通過在VC中將外部swf格式文件內嵌為VC的內部資源,使其在程序運行過程中從資源動態釋放到臨時文件,從而實現VC對Flash動畫的播放。


              引言

              Flash動畫由于可以很方便地把用戶的想象通過動畫顯現出來,使原本只屬于專業制作人員的動畫制作變的異乎尋常的快捷、方便。由于Flash制作的動畫在層次、內容、表現形式等諸多方面均比較出色,因此在網絡上得到迅猛的發展,更有不少廠商用Flash在互聯網上做起了廣告和產品演示,效果絲毫不比視頻的差,而體積則要小的多。Flash不僅在網絡上有廣泛的應用,在普通的應用程序中也可以借助Flash實現一些VC、Delphi等編程語言所難以實現的特效,比如在一些演示版的程序中完全可以將程序運行前的閃屏用Flash來制作。本文下面將通過對內嵌資源的動態釋放來實現VC對Flash動畫的播放,并給出了部分實現代碼。

              嵌資源的動態釋放

              Flash動畫在此是作為程序的一個模塊,雖然也可以以文件的形式作為一個外部資源來使用,但為了避免因外部模塊遺失而造成程序的非正常運行,可將由Flash 5.0預先制作好的swf格式的文件以資源的形式打包到應用程序中去,而在程序運行時再將其從資源恢復到文件,使用完畢再通過程序將其從磁盤刪除。

              在導入資源時由于swf格式文件并非VC的標準資源,所以在導入時需要在"Resource type"欄指定資源類型"SWF",特別需要注意的是在此必須要包含引號。加入到資源后可以通過資源視圖看到導入的SWF資源是以二進制形式保存的,一但加入就不能再通過資源視圖對其進行編輯了。

              在使用SWF資源前首先要將其動態從應用程序中釋放到文件中才可對資源做進一步的使用。可先通過宏MAKEINTRESOURCE()將資源標識號IDR_SWF轉換成字符串Name,再分別通過FindResource()、LoadResource()函數查找、裝載該資源到內存:

            CString Type="swf";
            HRSRC res=FindResource (NULL,Name,Type);
            HGLOBAL gl=LoadResource (NULL,res);

              當資源加載到內存后,還要通過對資源內存的鎖定來返回指向資源內存的地址的指針,并籍此實現資源從內存到磁盤的保存,至于存盤的操作則由文件函數CreateFile()、和WriteFile()來完成:

            LPVOID lp=LockResource(gl); //返回指向資源內存的地址的指針。
            CString filename="Temp.swf"; //保存的臨時文件名
            // CREATE_ALWAYS為不管文件存不存在都產生新文件。
            fp= CreateFile(filename ,GENERIC_WRITE,0,NULL,CREATE_ALWAYS,0,NULL);
            DWORD a;
            //sizeofResource 得到資源文件的大小
            if (!WriteFile (fp,lp,SizeofResource (NULL,res),&a,NULL))
            return false;
            CloseHandle (fp); //關閉句柄
            FreeResource (gl); //釋放內存

              通過上述代碼,可將SWF資源從應用程序中提取并釋放到臨時文件Temp.swf中,在此后只對此臨時文件操作,與程序內嵌資源無關。

              Flash動畫的播放

              swf格式的Flash動畫通常主要應用在網頁上,也就是說IE瀏覽器本身可以支持Flash動畫的播放。這樣就不必再單獨編寫用于播放swf文件的代碼,從而大大減少編程的工作量。在VC ++ 6.0中新增了一個從CView派生的、用于處理網頁的視類CHtmlView,由于該類是以Internet Explorer為后臺支持,因此在創建工程時只需在最后一步指定視類從CHtmlView派生就可以使程序不編一行代碼而具備IE瀏覽器的網頁顯示能力。

              程序剛生成的時候缺省的連接主頁是為微軟公司的主頁,需要對此修改,使程序在執行時立即顯示剛才提取出來的Flash臨時文件Temp.swf。顯示缺省主頁的代碼是在視類的初始化函數中進行的:

            void CEmbedModuleView::OnInitialUpdate()
            {
            CHtmlView::OnInitialUpdate();
            Navigate2(_T("http://www.microsoft.com"),NULL,NULL);
            }

              顯然要將Navigate2()函數的第一個參數改成Temp.swf的存放路徑。剛才在釋放資源到文件時并沒有指定絕對路徑,因此釋放出來的資源文件應當和應用程序處于同一目錄。但是在此處如果不寫明絕對路徑是無法顯示該臨時文件的。獲取該臨時文件的絕對路徑可用如下方法實現:先獲取應用程序本身的絕對路徑,然后去處應用程序全名(程序名和擴展名)此時得到的是應用程序和臨時文件所處文件夾的路徑,最后只需在此基礎上加上臨時文件的文件名Temp.swf即可得到臨時文件的全路徑。下面是實現的主要代碼:


            //獲取應用程序的全路徑
            char exeFullPath[MAX_PATH];
            GetModuleFileName(NULL,exeFullPath,MAX_PATH);
            //將其格式化為字符串
            m_TempFile.Format("%s",exeFullPath);
            //去掉應用程序的全名(15為應用程序文件全名的長度)
            exeFullPath[m_TempFile.GetLength()-15]='\0';
            //得到應用程序所在路徑
            m_TempFile.Format("%s",exeFullPath);
            //得到臨時文件的全路徑
            m_TempFile+="Temp.swf";

              最后將得到的臨時文件的全路徑m_TempFile作為參數傳遞給Navigate2()即可在程序運行時把Flash動畫作為主頁而顯示
              由于臨時文件Temp.swf是在程序運行過程中從應用程序的資源中提取出來的,因此在程序退出之前需要將其刪除。一般是在消息WM_DESTORY的響應函數里通過DeleteFile()函數來加以實現的。

              小結

              本文通過對CHtmlView和內嵌資源的動態釋放實現了Flash動畫在VC程序中的播放,并對資源的動態釋放作了較為清晰的描述。通過類似的方法,可以將動態鏈接庫、HTML文件等程序模塊作為資源嵌入其中,在使用時再動態釋放到臨時文件,這樣可有效避免文件模塊過多時的雜亂以及程序模塊丟失導致程序非正常運行等情況的發生。本文所述程序在Windows 98下,由Microsoft Visual C++ 6.0編譯通過。Flash動畫由 Macromedia Flash 5.0制作,所需瀏覽器支持為Internet Explorer 6.0。
            posted on 2006-12-02 21:36 獨孤九劍 閱讀(347) 評論(0)  編輯 收藏 引用 所屬分類: Win32Visual C++ 8.0
            女同久久| 合区精品久久久中文字幕一区| 久久青青国产| 欧美激情精品久久久久| 国产精品久久久久久久午夜片| 99久久精品费精品国产| 天天影视色香欲综合久久| 色综合久久中文字幕综合网| 精品伊人久久大线蕉色首页| 久久99精品久久久久婷婷| 亚洲国产精久久久久久久| 亚洲人成无码www久久久| 久久精品国产亚洲av麻豆色欲| 久久综合给合久久狠狠狠97色 | 国产精品99久久久久久www| 狠狠人妻久久久久久综合蜜桃| 亚洲精品久久久www| 国产精品久久久久久久久| 国产激情久久久久影院老熟女免费| 欧美午夜A∨大片久久 | 青青草原综合久久| 久久亚洲sm情趣捆绑调教| 国产精品女同一区二区久久| 99久久国产综合精品女同图片| 精品久久久久久久久中文字幕| 久久天天婷婷五月俺也去| 青青青国产成人久久111网站| 7777精品久久久大香线蕉| 蜜桃麻豆www久久国产精品| 日本久久久精品中文字幕| 精品久久久久久久久午夜福利| 久久久久国产日韩精品网站| 情人伊人久久综合亚洲| 久久精品水蜜桃av综合天堂| 日韩中文久久| 久久精品成人免费国产片小草| 777久久精品一区二区三区无码| 人妻无码久久一区二区三区免费| 亚洲精品第一综合99久久| 中文国产成人精品久久亚洲精品AⅤ无码精品 | 精品欧美一区二区三区久久久|