當前位置:首頁 » 游戲資訊 » vc游戲編程怎麼加入視頻

vc游戲編程怎麼加入視頻

發布時間: 2022-10-01 05:45:29

⑴ 怎麼樣通過VC實現動畫應用

在VC程序中插入微型動畫
---- 下面利用CImageList類保存數幅畫面,利用Draw函數在一定的時間間隔播放出來,形成了類似GIF動畫的效果。該方法可以在Window的客戶區內、工具條上、狀態條上播放動畫。這里還給出了利用SetIcon函數在窗口標題欄上播放動畫的方法。

---- (一)、原理

----
在VC中有一個CImageList類可以以圖像列表的方式管理圖像,圖像列表中的圖像大小相同,索引以0為開始,每個圖像都可以單獨引用。Microsoft
的API提供了一系列的函數,您可以利用這些函數創建、銷毀圖像列表,可以顯示圖像、增加和刪除圖像,替代、合並和拖動圖像。

---- CImageList 類提供了Windows圖像列表通用控制項功能。下面對本文用到的函數簡要說明如下:
BOOL Create( int cx, int cy, UINT nFlags, int nInitial, intnGrow );

---- 該函數用於創建一個圖像列表。 cx,cy
是每個圖像的寬度和高度;nFlags是圖像列表的類型,其值僅可包含一個ILC_COLOR值。其詳細取值參見VC在線幫助。nInitial為圖像列表最初含有的圖像數目;nGrow為當圖像數量需要改變時,每次動態增長的圖像數。
BOOL Draw( CDC* pdc, int nImage, POINT pt, UINT nStyle );

---- 該函數用於顯示一個圖像。pdc為目標設備上下文的指針;nImage為要顯示的圖像索引;pt為圖像顯示的位置;nStyle為圖像顯示風格,詳見在線幫助。
HICON ExtractIcon( int nImage );利用該函數可以得到一函數的句柄:int Add( HICON hIcon );該函數把一個圖像加入圖像列表中。

---- (二)、編程與實現

----
首先,建立圖表資源。在VC6.0中利用資源編輯器,建立幾幅圖表,IDI_ICON1、IDI_ICON2、IDI_ICON3......在編輯圖標時選擇Custom,將圖標設置成大小為64X32。由於Windows的各個部件不完全相同,其實現方法也不完全相同,下面對在窗口不同位置顯示動畫的方法分別加以介紹。

---- 1. 在View類客戶區繪制動畫

---- 在類的定義文件中加入下列變數:
POINT pt1;//圖像顯示的位置int m_Play; //將要顯示圖像的索引void CreateImageList();//創建圖像列表的函數CImageList m_ImageList1;//圖像列表對象int m_ImageNumber; //圖像列表中圖像的總數目首先初始化pt1.m_Play、m_ImageNumber:CImageView::CImageView(){// TODO: add construction code herept1.x =1;pt1.y =1;m_Play=0;m_ImageNumber=0;}CreateImageList()的實現如下:void CImageView::CreateImageList(){m_ImageList1.Create (64,32,ILC_COLOR,5,2);HICON hIcon = ::LoadIcon(AfxGetResource-Handle(),MAKEINTRESOURCE(IDI_ICON1));m_ImageList1.Add(hIcon);m_ImageNumber++;hIcon = ::LoadIcon(AfxGetResourceHandle(),MAKEINTRESOURCE(IDI_ICON2));m_ImageList1.Add(hIcon);m_ImageNumber++;hIcon = ::LoadIcon(AfxGetResourceHandle(),MAKEINTRESOURCE(IDI_ICON3));m_ImageList1.Add(hIcon);m_ImageNumber++;//把您要播放的所有資源加入圖像列表。}在OnCreate函數中設置計時器,並創建圖像列表:int CImageView::OnCreate(LPCREATESTRUCTlpCreateStruct){if (CView::OnCreate(lpCreateStruct) == -1)return -1;// TODO: Add your specialized creation code hereCreateImageList();SetTimer(1,500,NULL);return 0;}響應ON_TIMER消息,顯示動畫:void CImageView::OnTimer(UINT nIDEvent){// TODO: Add your message handler code here and/or call defaultCDC *pDC=GetDC();if(m_Play >m_ImageNumber)m_Play=0;m_ImageList1.Draw(pDC,m_Play,pt1,ILD_TRANSPARENT);m_Play++;ReleaseDC(pDC);CView::OnTimer(nIDEvent);}

---- 最後別忘了在OnDestroy函數中,增加在窗口撤銷時中止定時器的代碼。

---- 2. 在狀態條上顯示動畫

---- 由於狀態條也是窗口,所以也可以在其上顯示動畫。在CMainFrame類中可以看到下列代碼:
protected: // control bar embedded membersCStatusBar m_wndStatusBar;

---- 所以為了在狀態條上顯示動畫,其編程代碼應在CMainFrame類中加入。首先創建資源文件和圖像列表類,具體方法和代碼見View類客戶區繪制動畫一節,此處不再重復。下面給出ON_TIMER的響應函數:
void CMainFrame::OnTimer(UINT nIDEvent){// TODO: Add your message handler code here and/or call defaultif(m_Play >m_ImageNumber)m_Play=0;//如果圖畫為最後一個,顯示第一幅圖片CDC *pDC=this- >m_wndStatusBar. GetDC();ASSERT(pDC!=NULL);pt1.x=1;pt1.y =1;m_ImageList1.Draw(pDC,m_Play,pt1,ILD_TRANSPARENT);ReleaseDC(pDC);m_Play++;CFrameWnd::OnTimer(nIDEvent);}

---- 上述代碼將在狀態條左上方播放動畫。

---- 3. 在工具欄上播放動畫

---- 由於工具欄的性質與狀態條差不多,其播放動畫的方法也相似,下面給出ON_TIMER的響應函數:
void CMainFrame::OnTimer(UINT nIDEvent){// TODO: Add your message handler code here and/or call defaultif(m_Play >m_ImageNumber)m_Play=0;//如果圖畫為最後一個,顯示第一幅圖片CRect rect;CDC *pDC;pDC=this- >m_wndToolBar.GetDC();ASSERT(pDC!=NULL);this- >m_wndToolBar.GetClientRect(&rect);//獲得顯示有效區域pt1.x =rect.right -64; //將顯示位置定在最右邊pt1.y=1;m_ImageList1.Draw(pDC,m_Play,pt1,ILD_TRANSPARENT);ReleaseDC(pDC);m_Play++;CFrameWnd::OnTimer(nIDEvent);}

---- 上述代碼將在工具欄右上方播放動畫。但如仔細觀察,動畫的位置並不是靠近窗口最右邊,這是因為工具欄的窗口有邊界,採用如下方法,可以把畫面移到窗口右邊:
pDC=GetDC ();//獲得CMainFrame的畫圖設備指針ASSERT(pDC!=NULL);this- >GetClientRect(&rect);pt1.x =rect.right-64 ;pt1.y=rect.top+3 ;m_ImageList1.Draw(pDC,m_Play,pt1,ILD_TRANSPARENT);ReleaseDC(pDC);這是因為工具欄占據的位置屬於CMainFrame的客戶區。

---- 4. 使圖標變成動畫

---- 在CWnd類中有一個函數:
HICON SetIcon( HICON hIcon, BOOL bBigIcon);可以改變窗口的圖標,所以您可以通過使用該函數不斷地改變圖標使圖標動起來,效果像GetRight一樣。 在OnTimer函數中加入下列代碼:SetIcon(m_ImageList1.ExtractIcon(m_Play),FALSE);

---- 就可以使圖標動起來。當然為了使程序工作得更好,您最好重建一套圖標資源。

⑵ vc 6.0 如何添加圖片組(游戲編程,連續的畫面),如何顯示

這個還是打包成資源文件比較好。如果只是做小游戲可以作為資源添加到工程的資源中。載入和顯示話要看你是用什麼做游戲了,D3D,DDRAW(這個微軟早就不管了,但還是可以用),GDI都有所不同。比如說GDI吧,這個做大游戲有點勉強,但不用再多進行設置。載入文件可以用LoadImage,顯示的話用StretchBlt。這都只是最簡單基本的東西,真正要做一個游戲僅憑這些是不夠的。最好根據你要用的工具,多參考相關的文檔,比如msdn。

⑶ 有關VC游戲編程的幾點建議

對於剛剛進入游戲開發領域的初學者,有時候可能會覺得不知道怎樣才能掌握游戲開發的知識和技術。其實,絕大多數的游戲開發,更多的是關於對開發過程的基本了解,而很少是如何寫復雜的代碼。開發者也需要懂得一些游戲開發的竅門。

盡管每個人學習開發的過程會不一樣,然而無論如何,系統的學習方法對每個學習者來說都是至關重要的。對於初學者,應該經常向資深的游戲開發者學習,通過他們的直播和視頻,學習游戲開發的技巧。你從這些專家們身上學到的東西越多,你就可以越快成為優秀的開發者。

對於「系統的學習方法」,大多數人都不會陌生。但事實上不是人人都可以做得到。即使是那些已經工作了多年的開發者,也會忘記或忽視了一些有用的方法。以下,我們一起來分享10條給游戲開發初學者的建議。

大膽思考,從「小」開始
游戲開發的初學者不要只想著開發那些很牛的游戲,例如Quake和Starcraft。我們鼓勵開發者敢於大膽思考,解放自己的思維空間。不過,對於你未來的雄心壯志,最好還是從開發一個小游戲開始,然後再根據你自己的經驗循序漸進。
你可以從一個簡單的游戲開始你的開發工作,尤其是當你要使用一些新工具來開發游戲的時候,盡量先從簡單的游戲開始。例如俄羅斯方塊,這個經典的益智游戲具備了一個成功游戲的所有要素。它只有一個游戲循環,只有當用戶退出的時候才會結束。它使用了視覺化的功能和動畫,變得更有吸引力。另外,它的游戲難度是簡單的,但教會了開發者很多東西。所以,先嘗試著手開發像俄羅斯方塊這樣簡單的游戲,你會獲得全面的學習體驗。

反復嘗試你自己的游戲
游戲要想成功必須要有趣,它要比高端的圖形和故事有趣得多。如果連你自己都無法對自己的游戲產生興趣,那麼沒有人會對它感興趣了。因此,你得反復地嘗試這些游戲,即使它們很簡單。你可以努力從中找到方法,如何使它們變得更有趣和更令人上癮。一旦你滿意了它們的開發效果,你就可以說服別人來玩你的游戲了。你可以邀請不同的人來玩游戲,從小孩到老人,並觀察他們的反應。

如果他們看起來對你的游戲感興趣,這很好。如果他們沒什麼興趣,而且還有不滿,那麼你就知道你的游戲需要改善了。詢問他們的意見,游戲的哪些方面是他們不滿意的,並進行必要的調整。

關注其他游戲開發者
目前游戲行業的廣泛發展令世界的游戲開發者數量呈爆炸性的增長。因此,要在市場上引起關注是很難的。但這並不是一件壞事,因為你可以與很多專家和同行交流,他們可以幫助你成為一名成功的游戲開發者。
你可以關注一些知名的游戲開發者的直播。例如,在 Livecoding.tv上就集結了不少經驗豐富的游戲開發者,他們會直播開發游戲的編碼過程,還會提供視頻,方便有興趣的觀眾進一步了解和學習。

關注新聞
在任何行業,游戲開發的重點取決於目前的趨勢。一個特殊類型的游戲可能會在當前的市場環境下受到歡迎,但可能過不了多久,它就被取代了。如果你覺得你的創意是與眾不同的,而且是值得你去追求的,那麼你不需要虔誠地追隨潮流,但是你還是需要留意它們。

現在有許多平台可以讓你隨時了解在游戲開發領域的趨勢和新聞。這些平台包括了Gamasutra 和Board Game Geek。你還可以關注Edge magazine,一個關於游戲開發的電子雜志網站,或者是在Livecoding.tv上那些游戲開發者的直播和視頻。

嘗試類似的游戲並嚴謹地評估它們
現在,像Subway Surfers(地鐵跑酷)和Candy
Crush(糖果傳奇)這些游戲已經完全不是新概念了。它採取了大量很酷的開發工作,把這些通用的游戲概念轉變為有數百萬美元收入的游戲。這包括了可愛的聲音、視覺效果,養眼的界面以及質朴的人物。因此,如果你懂得用正確的方法去設計一個游戲,並且為了設計好它,你會去看其它相似的著名游戲,那麼即使只是最簡單的游戲,如俄羅斯方塊,它也一樣可以很出名。
嘗試用批判性的思維去評估這些游戲,是什麼令它們如此出色,並且嘗試把它們的成功之處運用到你的游戲中。它會令事情變得有趣。

嘗試,測試,寫碼
當你能夠在開發游戲時同時處理多個工作任務的時候,你將開始想知道成為一名專業游戲開發者是怎樣的。如果你有了一個特別的靈感,你應該立即執行它,並測試它。這部分的工作開始得越慢,你就越難在工作計劃中變得積極。

盡可能發揮創意
如果沒有原創性,游戲開發就沒有意義了。因此不要害怕嘗試你的瘋狂想法,並把它們融入到你的游戲中。你沒有必要遵循書本上的具體定律,甚至在游戲環境中,人類本身的認知並不重要,只要它對玩家來說是有趣的。
從不停止學習
在游戲開發中,如果你沒有一個永遠學習的態度,你不可能成為一個征服所有人的專家。多年來,我們已經看到了有很多游戲開發平台和開發語言出現。游戲開發者不可以避免自己的學習歷程可能會有變緩的風險,因此要多關注新聞,在你的游戲中多作嘗試和融入新的趨勢。它將令你的游戲有一個最新的前景。
把它變成一件日常的事情
游戲開發永遠不會突然取得成功,你需要每天勤奮地工作。不要放過每一個機會去玩你的游戲並為它工作,它將成為你的第二天性。如果游戲不有趣,那就注入熱情,用天馬行空的方法來讓它變得是有價值的。如果你不能自我激勵地為自己的游戲工作,你有可能在你一生中也無法獲得成功。

⑷ 誰做過用vc++編程做視頻疊加字幕的么急求!!!

一、任何一種語言之所以能夠存在,它必定有它可取的地方,同時語言之所以需要發展,也說明任何語言都是有自己的劣勢的。我常常在網上,特別是一些大學的論壇上見到關於BCB與VC誰優誰劣,C#會不會取代C++這種論題,而常常這種話題是最熱門的話題。我沒有資格去評價這種現象,但是我是從來不參與這種討論的。因為我覺得這種討論沒有任何意義!每種語言之所以能成為一種語言,它必然有它的可取之處。比如說,BASIC語言的簡便易學,C語言的簡潔高效,C++語言的功能強大。但是如果你是初學計算機語言,我卻會建議你去學Pascal,為什麼?因為它的結構嚴謹。要培養嚴謹的編程習慣,它可能是最好的了。 二、每個人學習的目的不一樣,可以選擇的學習對象會不一樣的。如果您是想做一些小程序的開發,我覺得VB是很好的。簡便易學。如果您要做的是大項目的開發,VC和BCB都是比較適合的。如果您有C或C++語言的背景,也許您會喜歡BCB。但是如果您要做UNIX下的軟體開發,可能C和C++還是首要的選擇。因此,根本就沒有一種統一標准來衡量哪種語言是好的,我覺得只要是適合您的語言就是好的。 三、任何一門語言,入門是很簡單的,但是要想能真正達到實用,能夠寫出好的程序是需要花很多時間的。沒有速成法,沒有捷徑。對於VB或BCB等一類RAD工具來說,要想入門,大概一個星期差不多了吧。但是,如果您想做的是軟體開發,可能不是一兩個星期能解決問題的。 四、軟體並不僅僅是代碼。要想開發出好的軟體,還有其他別的知識是必需要掌握的,特別是軟體工程的東西。現在由於有好些人員對於軟體開發總是認為,能寫出代碼就算完成了開發,他們認為軟體就是寫代碼。但是事實並不是這樣。 五、為了真正學好一門語言,學一些與此相關的知識我覺得是很有必要的。比如您想要學習Java,如果您學習一些面向對象的知識絕對有助於您對於這門語言的理解。如果您能學習一些標准C++方面的知識對於您學習VC或者BCB都絕對是有好處的。 六、對於一個編程入門者來說,選擇一門容易上手的工具可能是最好的,因為對於初學者來說,樹立信心可能比編程本身更來的重要。VB和BCB可能是最好的選擇。VB和BCB有一個共同的特點就是上手容易。但是要清楚的是,容易上手並不代表它很容易駕馭,要真正精通一門語言絕對不是一件很簡單的事。 七、語言的學習不可過於功利。我想我說這句話可能得冒被拍的危險,但是我還是要說的。有些朋友說,想學一門很容易掌握的語言以便於好找工作的。還有的朋友說,想學能夠適應社會形勢的(我都有點沒搞懂他這句話是指什麼)。但是,我要說,如果您已經到了必須找一份工作來准備明天的早飯的話,我勸你還是做點別的吧。軟體的開發並不是一朝一夕的事。 目前,流行的計算機語言非常多,如 VB、VC++、Vfp、Delphi、C++Builder、J++Builder、PB、Perl、ASP、PHP、JSP、Java、JavaScript、VbScript、C#、ASP+、HTML、XML、CSS 等等,已經不像 5 年前只有 Basic、Pascle、Turbo C、Fortran、Coble、Foxpro 等容易讓人選擇,而且新的語言還在不斷出現。那麼,如果你打算投身計算機這個行業,你准備學習哪門語言呢? 要選擇什麼語言,應根據你的從業方向,還有你以往的語言基礎來決定。如果你打算從事資料庫方面的編程,那麼 PB、VB、Delphi、Vfp 可以選擇,當然 PB 是首選;如果你打算從事網路(非網站)編程,那麼可以選擇 VC++、C++Builder、Delphi 等語言,筆者推薦 C++Builder 語言,它具有 Delphi 容易上手、使用簡單的優點,又能為你參加考試做好准備,因為現在計算機考試的標准語言是 C 語言。當然現在許多程序員以能夠操控 VC++ 為榮耀,甚至認為只有使用 VC++ 的程序員才是程序員,你怎麼看是你自己的事了。如果你打算從事網站編程,那麼 HTML、ASP、PHP、JSP、XML、Javascript 等不能不學,筆者的經驗是先學 HTML、ASP、Javascript 等,再過度到 XML、JSP 等。 以上是考慮從業的需要。如果你原來已經對 VB 有相當的了解(許多人開始學習計算機是從 VB 起步的),那麼,不要輕言放棄,VB 在資料庫、多媒體等方面功能並不遜色,況且有大量的優秀軟體是用 VB 開發的,微軟的許多開發應用中都有 VB 的影子。而且今天的 VB 已經是今非昔比了,它已經具備了開發網路應用、系統程序的能力,而且微軟還在加強它的功能。當然,如果你對 C/C++ 非常熟悉,那麼你學習 JavaScript、Java、JSP、C# 將會順手得多。 筆者再談一下語言的「尊卑貴賤」問題。現在在一些人的意識里,確有這種心理:越難學的語言其「含金量」越高。筆者曾在 Internet 上聽人傳聞「現在 Java 的年薪是 5 萬元。」這樣以來,像 VB 這種曾經為計算機的發展作出過巨大貢獻的語言,就遭到一些企業的輕視,有人把 VB 稱為「業余」語言,言下之意,VB 只配老百姓在茶餘飯後「玩玩」。相應的是,一些想成為「程序員」的人,拚命嚼著 VC++ 的 MFC 和類、封裝、繼承等一些古怪的字眼,並以此為莫大的榮耀,認為已經接近了計算機的「真諦」。 而事實的真相是怎樣的呢?微軟的享譽世界的字處理軟體 Word 是用 VB 開發的;微軟的 ASP、宏語言等都是 VB 的子集。由此可以看出 VB 的功能是何等的強大!最終用戶實際使用的是成型的軟體,是軟體給他們的工作、生活帶來的效率和樂趣,他們在購買和使用軟體的時候不會看它是不是用 C 語言製作的。某些企業只所以在招聘員工的時候強調要熟悉 VC++、Delphi、PB,只是為了向外界表明它的某種「檔次」,實際上含有商業攀比和廣告、公關的成分。

⑸ vc6.0小游戲編程過程

建議你去看下關於VC工具第一節課的視頻(VC工具如何使用)

⑹ 求vc中游戲編程的詳細步驟

#include "CDDraw.h"

typedef struct _DISPLAYMODE {
DDSURFACEDESC2 * pddsdMode;
DWORD dwNumMode;
}DISPLAYMODE;

DISPLAYMODE dmModes;

static HRESULT WINAPI ModeEnumRecord( DDSURFACEDESC2 * pNewMode,
VOID * pRecordInfo );
static BOOL WINAPI DDisplayEnumerate( GUID * pGUID,
LPSTR ,
LPSTR ,
LPVOID , HMONITOR );
/****************************************
* 函數名: CDDraw(...)
* 功能: 構造函數
* 版權所有 mochsh, 2004
*****************************************/
CDDraw::CDDraw()
{
//初始化變數
hWnd = NULL;
bFullScr = TRUE;
ScreenW = 640;
ScreenH = 480;
ScreenC = 16;
lpDD = NULL;
lpDDSPrimary = NULL;
lpDDSBack = NULL;
}

/****************************************
* 函數名: ~CDDraw()
* 功能: 析構函數
* 版權所有 mochsh, 2003
*****************************************/
CDDraw::~CDDraw()
{
if(lpDD!=NULL){
if(lpDDSBack!=NULL){
lpDDSBack->Release();
lpDDSBack = NULL;
}
if(lpDDSPrimary!=NULL){
lpDDSPrimary->Release();
lpDDSPrimary = NULL;
}
lpDD->Release();
lpDD = NULL;
}
}

/**************************************************
* 函數名: InitDDraw(...)
* 功能: 初始化DDraw,並且創建主表面和翻轉緩沖表面
* 版權所有 mochsh, 2003
***************************************************/
BOOL CDDraw::InitDDraw(HWND hWd,
BOOL bFScr,
DWORD ScrW,DWORD ScrH,
DWORD BitCount )
{
//--------------------------按給出的條件初始化變數
hWnd=hWd;
bFullScr=bFScr;
if(bFScr){//全屏模式
if(ScrW <= 640) { ScreenW = 640; ScreenH = 480; }
else if(ScrW <= 800){ ScreenW = 800; ScreenH = 600; }
else if(ScrW > 800) { ScreenW = 1024; ScreenH = 768; }
else {ScreenW=800; ScreenH = 600;}
if(BitCount<=8) ScreenC = 8;
else if(BitCount<=16)ScreenC = 16;
else if(BitCount<=24)ScreenC = 24;
else if(BitCount<=32)ScreenC = 32;
else ScreenC=16;

//檢查模式是否有效
CheckDisplayMode();
}
else{//窗口模式
ScreenW=ScrW;
ScreenH=ScrH;
}

//--------------------------初始化DirectDraw環境
HRESULT ddrval;
//創建DirectDraw對象
ddrval = DirectDrawCreateEx(NULL,(void **) &lpDD,IID_IDirectDraw7,NULL);
if( FAILED(ddrval) ) {
//創建DirectDraw對象出錯時進到這里來
//在這里可以記錄創建DirectDraw對象的出錯信息
return FALSE;
}
//******全屏模式***********//
if( bFullScr ){
//設置協作等級
ddrval = lpDD->SetCooperativeLevel( hWnd, DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN | DDSCL_ALLOWREBOOT );
if( FAILED( ddrval )){
//設置協作等級出錯時進到這里來
//在這里可以記錄設置協作等級的出錯信息
return FALSE;
}

//設置顯示模式
ddrval = lpDD->SetDisplayMode( ScreenW,ScreenH,ScreenC,NULL,NULL);
if( FAILED( ddrval ) ){
//設置顯示模式出錯時進到這里來
//在這里可以記錄設置顯示模式的出錯信息
return FALSE;
}

//創建主表面
DDSURFACEDESC2 ddsd;
ZeroMemory(&ddsd,sizeof(ddsd));
ddsd.dwSize = sizeof( ddsd );
ddsd.dwFlags = DDSD_CAPS | DDSD_BACKBUFFERCOUNT;
ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE |
DDSCAPS_FLIP |
DDSCAPS_COMPLEX;
ddsd.dwBackBufferCount = 1;
ddrval = lpDD->CreateSurface( &ddsd, &lpDDSPrimary, NULL );
if (ddrval!=DD_OK) {
//創建主表面出錯時進到這里來
//在這里可以記錄創建主表面的出錯信息
return FALSE;
}

//創建後台緩沖表面
DDSCAPS2 ddscaps;
ZeroMemory(&ddscaps,sizeof(ddscaps));
ddscaps.dwCaps=DDSCAPS_BACKBUFFER;
ddrval=lpDDSPrimary->GetAttachedSurface(&ddscaps,&lpDDSBack);
if (ddrval!=DD_OK) {
//獲取後台緩沖表面出錯時進到這里來
//在這里可以記錄後台緩沖表面的出錯信息
return FALSE;
}
return TRUE;
}
//******窗口模式***********//
else{
//設置協作等級
ddrval=(HRESULT)lpDD->SetCooperativeLevel( hWnd, DDSCL_NORMAL );

//創建主表面
DDSURFACEDESC2 ddsd;
ZeroMemory( &ddsd, sizeof(ddsd) );
ddsd.dwSize = sizeof(ddsd);
ddsd.dwFlags = DDSD_CAPS;
ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE;
//創建主表面,並取得指向主表面的指針lpDDSPrimary
ddrval = lpDD->CreateSurface( &ddsd, &lpDDSPrimary, NULL );
if( FAILED( ddrval )){
//創建主表面出錯時進到這里來
//在這里可以記錄創建主表面的出錯信息
return FALSE;
}

//使用裁剪器
UseClipper();

//創建後台緩沖表面
//:::::::ddsd前面已經聲明
ZeroMemory(&ddsd,sizeof(ddsd));
ddsd.dwSize=sizeof(ddsd);
ddsd.dwFlags = DDSD_CAPS | DDSD_HEIGHT |DDSD_WIDTH;
ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY;
ddsd.dwWidth = ScreenW;//寬的解析度
ddsd.dwHeight = ScreenH;//高的解析度
//創建一後台緩沖表面
ddrval = lpDD->CreateSurface( &ddsd, &lpDDSBack, NULL );
if( FAILED( ddrval )){
//創建後台緩沖表面出錯時進到這里來
//在這里可以記錄創建後台緩沖表面的出錯信息
return FALSE;
}
}

return TRUE;
//--------------------------初始化DirectDraw環境完成
}

/**************************************************
* 函數名: Flip(...)
* 功能: 翻轉表面==>顯示
* 版權所有 mochsh, 2003
***************************************************/
void CDDraw::Flip( LPRECT pRectWin )
{
HRESULT ddrval=1;

if( lpDDSPrimary && lpDDSBack )
{
//檢查表面是否丟失
if (lpDDSPrimary->IsLost()==DDERR_SURFACELOST)
lpDDSPrimary->Restore();
if (lpDDSBack->IsLost()==DDERR_SURFACELOST)
lpDDSBack->Restore();
do{
if(bFullScr==1)
ddrval = lpDDSPrimary->Flip( NULL, DDFLIP_WAIT );
else
ddrval = lpDDSPrimary->Blt( pRectWin,lpDDSBack,NULL,DDBLT_WAIT,NULL);

//翻轉表面後的信息檢測
if( ddrval == DD_OK )
break;
else if( ddrval == DDERR_SURFACELOST ){
if( FAILED(lpDDSBack->Restore()) )
break;
if( FAILED(lpDDSPrimary->Restore()) )
break;
}
else if( ddrval != DDERR_WASSTILLDRAWING )
break;
}while( 1 );
}
}

/**********************************************
* 函數名: UseClipper(...)
* 功能: 創建一個裁剪器,並將它附於主表面
* 版權所有 mochsh, 2003
***********************************************/
HRESULT CDDraw::UseClipper( void )
{
HRESULT ddrval;
LPDIRECTDRAWCLIPPER lpClipper = NULL;

//創建一個剪裁器對象
ddrval = lpDD->CreateClipper(0, &lpClipper, NULL);
if ( ddrval != DD_OK){
//調用CreateClipper創建剪裁器對象出錯進到這來
//在這里可以記錄出錯信息
return ddrval;
}

//將裁剪器設置為hWnd指向的窗口的客戶區的范圍
ddrval = lpClipper->SetHWnd(0, hWnd);
if ( ddrval != DD_OK){
//調用SetHWnd設置窗口句柄出錯進到這來
//在這里可以記錄出錯信息
return ddrval;
}

//將裁剪器附於主表面
ddrval = lpDDSPrimary->SetClipper(lpClipper);
if ( ddrval != DD_OK){
//將裁剪器附於主表面出錯進到這來
//在這里可以記錄出錯信息
return ddrval;
}

//主表面已經自動增加了裁剪器的索引值,所以應將它釋放
if( lpClipper != NULL ) {
lpClipper -> Release();
lpClipper = NULL;
}

return DD_OK;
}
/**********************************************
* 函數名: LoadBMPSurface(...)
* 功能: 將BitmapFile指定的點陣圖
* 格式圖像載入剛剛Surf指向的表面
* 版權所有 mochsh, 2003
***********************************************/
BOOL CDDraw::LoadBMPSurface(LPDIRECTDRAWSURFACE7 &lpSurf, //要載入圖像的表面指針
LPCSTR BitmapFile )//源圖像的路徑
{
HDC hdcImage;
HDC hdc;
HBITMAP hbm;
BITMAP bm;
HRESULT ddrval;

if( lpSurf == NULL )
return FALSE;
// 將點陣圖作為文件來讀取
hbm = (HBITMAP)LoadImage(NULL,
BitmapFile,
IMAGE_BITMAP,
0, 0,
LR_LOADFROMFILE |
LR_CREATEDIBSECTION);
if (hbm == NULL){
//載入圖像失敗時進到這里來
//在這里可以記錄載入圖像失敗的信息
return FALSE;
}
//函數功能:創建一個與指定設備兼容的內存設備上下文環境(Device Context)
//創建一個與應用程序的當前顯示器兼容的內存設備上下文環境
hdcImage = CreateCompatibleDC(NULL);
if (!hdcImage){
//創建設備上下文出錯
return FALSE;
}
//選擇點陣圖對象到剛剛創建的內存設備上下文環境(DC)
SelectObject(hdcImage, hbm);

//獲取點陣圖寬與高
GetObject(hbm, sizeof(bm), &bm);

//獲取表面的寬與高
DDSURFACEDESC2 ddsd;
ddsd.dwSize = sizeof(ddsd);
lpSurf->GetSurfaceDesc(&ddsd);
if( BitmapFile!=NULL )
{
if ((ddrval = lpSurf->GetDC(&hdc)) == DD_OK)
{
//將源點陣圖復制到表面,可以進行拉伸或收縮
StretchBlt( hdc,
0, 0, ddsd.dwWidth, ddsd.dwHeight,
hdcImage,
0, 0, bm.bmWidth, bm.bmHeight,
SRCCOPY);
lpSurf->ReleaseDC(hdc);
}
}

DeleteDC(hdcImage);

if( ddrval != DD_OK ) {
//復制矩形塊失敗
return FALSE;
}

return TRUE;
}
return hr;

}

初始化設備,放不下,沒給全。

⑺ 請問怎樣在VC++ MFC 對話框中打開視頻 新手謝謝啊

對話框資源設計時,這個框多大,如何布局,用哪個控制項,都由自己安排。
大篇文字,例如你要寫一大段幫助信息,你用靜態字也可以。用Text Area 也可以。
對話框 也是一個 window, 與程序生成的別的窗體一樣,一大篇文字,也可以臨時寫入,就像瀏覽器窗,編輯窗一樣,看你怎麼設計。

⑻ c++游戲開發,求學習方法和教程/書籍/視頻

學習編程最重要的是有恆心,多積累經驗,多自己嘗試編些東西,
錢能. C++程序設計教程. 第一版.清華大學出版社
然後再學一下VC++,再自己試著多編一些東西,編程最重要的是積累經驗。

Visual C++游戲編程人員至少要會的:
c++語言的語法,標准庫
會使用VC,
了解DirectX編程.
下面的多多益善:
軟體工程,會用某個源代碼管理工具(VSS SVN什麼的)
數據結構和演算法,游戲編程對效率比較關心。
英語, 許多好的資料都是英文的。
經驗, 這個最重要。

再給你介紹一些網站能找c++游戲編程的資料:

游戲製作人的網路平台www.gameres.com
中國網游研發中心www.ogdev.net
購買游戲編程書籍的專業網站www.dearbook.com

http://..com/question/4986190.html?si=10
學一個月,可以用VC寫一些小程序自己玩玩
學兩個月,可以用VC寫像樣點的東西在周圍人面前炫炫
學三個月,可以用VC給老闆開始幹活了
學六個月,開始重頭去學C++
學一年後,決定要不要繼續,if(繼續) 學習MFC、ATL、STL、C#、BCB、Network、Databa
se、Algorithm... else開始就是個錯誤
學三年後,學會怎麼來用編程語言來解決問題,VC、BCB等都只是解決問題的工具。這時候
你如果還在學C++,你可以從事軟體開發這個很有「前途」的職業了

熱點內容
絕地求生未來之役比賽為什麼進不去 發布:2023-08-31 22:07:08 瀏覽:1437
dota2位置什麼意思 發布:2023-08-31 22:00:04 瀏覽:871
lol電競是什麼樣子 發布:2023-08-31 21:58:40 瀏覽:1331
絕地求生八倍鏡的那個圓圈怎麼弄 發布:2023-08-31 21:58:31 瀏覽:1419
lol龍龜一個多少金幣 發布:2023-08-31 21:55:07 瀏覽:781
王者如何改游戲內名稱 發布:2023-08-31 21:55:06 瀏覽:1070
游戲主播打廣告是什麼意思 發布:2023-08-31 21:55:06 瀏覽:1760
絕地求生如何免費拿到ss7賽季手冊 發布:2023-08-31 21:52:13 瀏覽:951
pgg是哪個國家的戰隊lol 發布:2023-08-31 21:52:07 瀏覽:831
一個人的時候才發現游戲很沒意思 發布:2023-08-31 21:49:24 瀏覽:1465