亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C++ > 正文

C++ Builder中各種資源的利用

2019-09-06 23:33:26
字體:
來源:轉載
供稿:網友

                    工作單位: 煙臺南大街建行科技部

   在編寫程序的過程中,經常要用到各種資源。比如說,想給自己的程序換個自己的圖標,使用一些活潑的光標來增加趣味性,播放一些聲音和動畫文件,或者使用別人寫好的程序來實現某個功能。我們往往希望將這些資源直接放到EXE文件中以形成一個單獨的可執行文件,這就存在一個如何在運行時訪問和使用這些資源的問題。
   
 ----在編譯期間,這就要用到一種文件,以.rc結尾的資源定義文件。
   
 ----一:RC文件
   
 ---- rc文件是個文本文件,它的格式很簡單,按如下格式定義:
   
 ----資源標識符資源類型資源的路徑
   
 ----以下的rc文件定義了一個聲音資源,兩個光標資源,三個圖標資源和一個exe文件資源。
   
src1.rc:
 S1/tWAV     wav1.Wav
 C1/tCURSOR  cursor1.cur
 C2/tCURSOR  cursor2.cur
 I1/tICON    icone1.ico
 I2/tICON    icone2.ico
 I3/tICON    icone3.ico
 unzip     EXEFILE  pkunzip.exe

   
 ----你可以將寫好的rc文件加到你
  的project(項目)中。你也可以手工將其編譯為供程序直接使用的二進制資源文件(.res文件)。在BCB3.0中,可以使用命令行:brcc32 src1.rc src1.res。
   
 ----二:資源的使用
   
 ----下面,按照使用的簡繁程度,依次說明各類資源的使用方法。需要說明的是,下面講述的使用方法,在別的編譯環境下(BC, VC等)也是一樣的。
   
 ---- 1:建立一個新的項目
 ----啟動BCB3.0,選FILE- >new- >Application 建立一個新的項目。
   
 ----在project- >Add to Project中,加入寫好的src1.rc文件。當然,那些聲音、光標、圖標文件都應該存在。
   
 ----這時,我們有了一個空的窗體(Form)。
   
   
 ---- 2:能夠利用windows API函數直接訪問的資源有:
   
圖標   LoadIcon()
光標   LoadCursor()
加速表 LoadAccelerators()
位圖   LoadBitmap()
菜單   LoadMenu()
字符串 LoadString()

   
 ----前五個API函數使用方法都一樣,帶兩個參數。
   
 ----第一個參數指明資源的存放地,第二個參數為rc文件中資源的標識。
   
 ----字符串LoadString除這兩個參數外,還有兩個參數,指明字符串緩沖區的地址和大小。
   
 ----下面的一小段程序示范了圖標和光標的使用。
   
 ----在Form上放置一個按紐,在其OnClick事件中加入以下代碼:
   
void __fastcall TForm1::Button1Click(Tobject *Sender)
{
  //將光標形狀改為自己定義的:
 Screen- >Cursors[crDefault] = LoadCursor( Hinstance, "C1");
 //將圖標改為自己定義的:
 Icon = new Ticon() ;
 Icon- >Handle = LoadIcon(Hinstance,"I1");
 Application- >Icon = Icon ;
}

 ----其中的Hinstance指示資源所在地為執行文件。編譯執行后,點擊該按紐,光標和圖標都會換成新的。
   
 ---- 3:能夠通過windows API使用的資源
 ----對于聲音、動畫等文件,可以使用windows API函數播放。但是不象上面幾種資源,需要遵循一定的步驟。如下所示,依次調用FindResource, LoadResource, LockResource函數,來播放一個Wav聲音文件。
   
 ----(當然,獨立的聲音文件可以在運行時直接播放。我們這里討論的是將wav文件編譯進EXE文件的情況)
   
 ----在Form上放置第二個按紐,在其OnClick事件中加入以下代碼:
   
void __fastcall TForm1::Button2Click(Tobject *Sender)
{
//定義資源塊
char *wav_handle ;
//裝入Wav文件
HRSRC h = FindResource(Hinstance,"S1","WAV");
  HGLOBAL h1 = LoadResource(Hinstance, h);
  wav_handle = (char *)LockResource(h1);
//播放Wav文件。由于Wav文件裝載在內存中,
   sndPlaySound函數要用SND_MEMORY參數
sndPlaySound(wav_handle, SND_MEMORY | SND_SYNC);
}

   
 ----編譯執行后,點擊該按紐,會播放一次聲音。
   
 ----對于動畫等文件,使用方式類似Wav文件。(BCB提供了一個Tanimate控件,可以播放無聲的Avi文件)
   
 ---- 4:不能直接通過windows API使用的資源    
 ----此種資源不能夠由windows API直接訪問和執行。但是,我們可以用一種變通的方法來使用它。
   
 ----下面示范如何使用pkunzip.exe,思路如下:程序運行時,將pkunzip.exe從EXE文件中分離出來,放在臨時目錄下,用ShellExecute()執行它。
   
 ----在FORM上放置第三個按紐,在放置兩個Edit ,用來輸入pkunzip.exe的參數。
   
void __fastcall TForm1::Button3Click(Tobject *Sender)
{
char exefile[100], tmppath[100] ;
   unsigned long ret ;
   //檢查pkunzip.exe是否已經存在
GetTempPath( 100, tmppath ) ;
   strcpy( exefile ,(AnsiString(tmppath)+
    AnsiString("/pkunzip.exe") ).c_str() ) ;
ret = GetFileAttributes( exefile ) ;
   if( ret == 0xffffffff )
    { //不存在,則分離出pkunzip.exe
/t  TResourceStream &rs = *new TResourceStream( (int)Hinstance, AnsiString("unzip"),"EXEFILE" ) ;
   rs.SaveToFile( AnsiString(exefile) ) ;
/t   delete &rs ;
  }
 //執行pkunzip.exe
// Edit1- >Text和Edit2- >Text分別為運行時輸入的zip文件名和目標文件目錄。
ShellExecute(Hinstance, "open", exefile, AnsiString("-d ") + Edit1- >Text + " " + Edit2- >Text).c_str(), tmppath, SW_HIDE ) ;
/tApplication- >MessageBox("解壓縮完成", "OK", IDOK ) ;
}

   
 ----此種方法實際上是用時間和空間來換取便利性,有一定的參考價值。例如,DynaDoc的免費分發版本,就是將真正的執行程序壓縮后放在一個有解壓縮功能的“殼”中。運行時,首先是“殼”運行起來,將真正的執行程序解壓縮到臨時目錄,然后去運行它。如果你的程序含有大量的BMP,WAV文件,不妨一試,能讓你的程序減肥不少。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美成人全部免费| 国产精品久久久久久五月尺| 色综合色综合网色综合| 精品亚洲一区二区三区在线播放| 成人综合网网址| 日韩在线观看电影| 亚洲精品中文字幕女同| 久久久在线观看| 精品五月天久久| 精品日韩视频在线观看| 国产精品高潮呻吟久久av黑人| 欧美一区二区影院| 国产一区二区三区视频免费| 欧美日韩国产一区二区| 亚洲天堂影视av| www.久久色.com| 国产视频综合在线| 欧美国产日韩xxxxx| 亚洲男人天堂2023| 国产精品色午夜在线观看| 欧美插天视频在线播放| 日本精品性网站在线观看| 91爱爱小视频k| 日韩在线视频线视频免费网站| 国产ts人妖一区二区三区| 日韩av影院在线观看| 色综合久综合久久综合久鬼88| 日韩精品一区二区三区第95| 国产婷婷97碰碰久久人人蜜臀| 51ⅴ精品国产91久久久久久| 国产日韩欧美91| 欧美精品在线观看91| 欧美成人sm免费视频| 日韩中文字幕网| 88xx成人精品| 欧美大片免费观看在线观看网站推荐| 久久69精品久久久久久久电影好| 精品久久在线播放| 日韩av三级在线观看| 97视频在线观看免费高清完整版在线观看| 深夜福利91大全| 一道本无吗dⅴd在线播放一区| 成人性生交大片免费观看嘿嘿视频| 国产成人91久久精品| 在线精品高清中文字幕| 久久精品视频在线播放| 18一19gay欧美视频网站| 国产精品第一第二| 成人久久18免费网站图片| 日韩免费观看视频| 亚洲最大的网站| 日韩中文字幕在线免费观看| 97国产精品视频| 欧美电影在线观看网站| 久久99国产综合精品女同| 国产性猛交xxxx免费看久久| 国产成人精品免费视频| 国产成人精品视频在线| 亚洲成人精品视频在线观看| 久久影视电视剧凤归四时歌| 国产欧美欧洲在线观看| 最近2019年手机中文字幕| 亚洲精品免费一区二区三区| 久久国产精品首页| 一区二区三区四区精品| 亚洲精品91美女久久久久久久| 欧美成人激情视频| 欧美激情区在线播放| 美乳少妇欧美精品| 亚洲人午夜色婷婷| 97av在线视频免费播放| 97视频在线免费观看| 欧美激情一区二区三级高清视频| 亚洲男女自偷自拍图片另类| 日韩男女性生活视频| 久久久久久噜噜噜久久久精品| 欧美超级免费视 在线| 2025国产精品视频| 日韩av在线看| 91精品久久久久久久久久久| 伦理中文字幕亚洲| 成人黄色短视频在线观看| 亚洲精品第一国产综合精品| 国产精品扒开腿做| 国产在线观看精品| 久久免费视频这里只有精品| 亚洲白拍色综合图区| 久久免费视频观看| 久久最新资源网| 一本色道久久综合狠狠躁篇的优点| 亚洲人免费视频| 国产不卡一区二区在线播放| 久久久久久久香蕉网| 欧美激情综合色| 日韩最新中文字幕电影免费看| 欧美日韩国产麻豆| 成人在线精品视频| 亚洲www在线观看| 欧美激情xxxx性bbbb| 日韩精品在线免费播放| 亚州欧美日韩中文视频| 亚洲欧美日韩一区二区在线| 亚洲欧美资源在线| 欧美日本亚洲视频| 国产www精品| 欧美日韩中文在线| 日韩大胆人体377p| 欧美亚洲伦理www| 精品自拍视频在线观看| 国产精品免费久久久久久| 国产精品自拍偷拍视频| 久久99青青精品免费观看| 97超碰色婷婷| 日韩福利伦理影院免费| 欧美激情久久久久| 91在线中文字幕| 亚洲精品免费av| 亚洲电影成人av99爱色| 久久网福利资源网站| 久久噜噜噜精品国产亚洲综合| 热门国产精品亚洲第一区在线| 中文字幕最新精品| 色偷偷88888欧美精品久久久| 成人激情视频小说免费下载| 久久久国产一区二区| 在线观看国产成人av片| 国产丝袜视频一区| 欧美精品激情blacked18| 国产精品福利观看| 国产亚洲欧洲高清一区| 亚洲精品短视频| 亚洲欧洲在线视频| 午夜精品福利电影| 久久综合五月天| 久久综合免费视频影院| 26uuu国产精品视频| 日韩av黄色在线观看| 欧美成人性生活| 免费91在线视频| 奇米影视亚洲狠狠色| 久久免费成人精品视频| 国产精品欧美久久久| 亚洲精品91美女久久久久久久| 久久久999成人| 国产成+人+综合+亚洲欧洲| 亚洲自拍偷拍一区| 九色精品美女在线| 欧美超级免费视 在线| 国产精品都在这里| 亚洲www在线观看| 国产美女精品视频免费观看| 97人洗澡人人免费公开视频碰碰碰| 668精品在线视频| 日韩在线视频网| 亚洲一区二区三区视频播放| 国产美女久久精品香蕉69| 久久精品亚洲精品| 国产精品视频1区| 欧美午夜激情小视频| 国产精品女人久久久久久| 日韩一中文字幕| 国产精品色视频| 91精品国产自产在线老师啪| 亚洲精品欧美日韩|