• <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 獨孤九劍 閱讀(351) 評論(0)  編輯 收藏 引用 所屬分類: Win32Visual C++ 8.0
            久久久久国产一区二区| 伊人色综合久久天天人守人婷| 日韩av无码久久精品免费| 久久永久免费人妻精品下载| 久久久精品人妻一区二区三区四| 99久久精品国产一区二区蜜芽| 久久国产高清一区二区三区| 国产成人精品三上悠亚久久| 99麻豆久久久国产精品免费| 伊人久久成人成综合网222| 麻豆亚洲AV永久无码精品久久| 很黄很污的网站久久mimi色| 日韩久久久久久中文人妻| 99热热久久这里只有精品68| 综合网日日天干夜夜久久| 国产女人aaa级久久久级| 九九久久自然熟的香蕉图片| 久久人人爽人人爽人人片av麻烦| 99久久久久| 久久精品视频网| 久久人人爽人人爽人人AV东京热| 久久久久久国产精品美女| 狠狠久久亚洲欧美专区| 久久无码人妻一区二区三区| 漂亮人妻被中出中文字幕久久| 精品久久久久久久久久中文字幕 | 婷婷五月深深久久精品| 久久99精品免费一区二区| 国产精品视频久久久| 日本强好片久久久久久AAA | AAA级久久久精品无码片| 亚洲天堂久久久| 欧美亚洲国产精品久久高清| 亚洲日韩欧美一区久久久久我| 久久综合久久鬼色| 久久九九久精品国产免费直播| 91精品国产91热久久久久福利| 情人伊人久久综合亚洲| 国产69精品久久久久9999| 777久久精品一区二区三区无码| 一级做a爰片久久毛片16|