⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 directdrawwin.h

📁 基于DirectX的游戏软件
💻 H
字号:
#ifndef DIRECTDRAWWIN_H
#define DIRECTDRAWWIN_H


const int MAXDRIVERS = 10;
const int MAXDISPLAYMODES = 100;


class DirectDrawWin : public CWnd
{
	struct DriverInfo
	{
		LPGUID guid;
		LPSTR desc, name;
	};

	struct DisplayModeInfo
	{
		DWORD width, height, depth;
	};

public:
	DirectDrawWin();
	BOOL Copy_Bmp08_Surface08(LPDIRECTDRAWSURFACE surf, BYTE* bmpbuf, int w, int h);
	BOOL Create(const CString& sTitle,int icon);
	virtual void DrawScene() = 0;
#ifdef _DEBUG
	void CheckResult( HRESULT result );
#endif
	LPDIRECTDRAW2 GetDDraw()  { return ddraw2; }

	//------- driver functions ---------
	int GetNumDrivers() { return totaldrivers; }
	BOOL GetDriverInfo( int index, LPGUID* guid, LPSTR* desc, LPSTR* name );
	virtual int SelectDriver() { return 0; }

	//------- display mode functions ---------
	int GetNumDisplayModes() { return totaldisplaymodes; }
	BOOL GetDisplayModeDimensions( int mode, DWORD& width, DWORD& height, DWORD& depth );
	int GetDisplayModeIndex( DWORD w, DWORD h, DWORD d );
	int GetCurDisplayMode()  { return curdisplaymode; }
	int GetCurDisplayDepth()  { return displaydepth; }
	void RestoreDisplayMode();
	BOOL ActivateDisplayMode( int mode );
	BOOL ActivateDisplayMode( int mode, DWORD rate );
	virtual int SelectInitialDisplayMode() = 0;

	//------- surface functions ---------
	virtual BOOL CreateCustomSurfaces() = 0;
	BOOL ClearSurface( LPDIRECTDRAWSURFACE surf, DWORD clr, RECT* rect=0 );
	LPDIRECTDRAWSURFACE CreateSurface(DWORD w, DWORD h );
//	LPDIRECTDRAWSURFACE CreateSurface(LPCTSTR filename, BOOL installpalette=FALSE);
//	BOOL LoadSurface(LPDIRECTDRAWSURFACE surf, LPCTSTR filename);
//	BOOL SaveSurface(LPDIRECTDRAWSURFACE surf, LPCTSTR filename);
	BOOL GetSurfaceDimensions( LPDIRECTDRAWSURFACE surf, DWORD& w, DWORD& h );
	BOOL GetSurfaceRect( LPDIRECTDRAWSURFACE surf, RECT& rect);
	virtual void RestoreSurfaces() = 0;
	BOOL BltSurface( LPDIRECTDRAWSURFACE destsurf, LPDIRECTDRAWSURFACE srcsurf, int x, int y, BOOL srccolorkey=FALSE );
	void PrintSurfaceInfo(LPDIRECTDRAWSURFACE surf, LPCTSTR name);

	//------- misc functions ---------
//	static BOOL GetBmpDimensions( LPCTSTR filename, int& w, int& h );
	int GetDisplayDepth()  { return displaydepth; }
	const CRect& GetDisplayRect() { return displayrect; }
	LPDIRECTDRAWSURFACE primsurf, backsurf;
protected:
	//{{AFX_MSG(DirectDrawWin)
	afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
	afx_msg void OnDestroy();
	afx_msg void OnActivateApp(BOOL bActive, HTASK hTask);
	afx_msg BOOL OnEraseBkgnd(CDC* pDC);
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()
private:
	static BOOL WINAPI DriverAvailable(LPGUID guid, LPSTR desc, LPSTR name, LPVOID p );
	static HRESULT WINAPI DisplayModeAvailable(LPDDSURFACEDESC, LPVOID);
	static int CompareModes( const void *arg1, const void *arg2 );
	virtual BOOL CreateFlippingSurfaces();
	BOOL PreDrawScene();
	BOOL Copy_Bmp_Surface(LPDIRECTDRAWSURFACE surf, BITMAPINFOHEADER* bmphdr, BYTE* buf);
//	BOOL SaveSurface08(LPDIRECTDRAWSURFACE surf, FILE* fp, DWORD w, DWORD h);
public:
	void Restore(void);
	BOOL CreatePalette(RGBQUAD* quad, int ncolors);
	LPDIRECTDRAWPALETTE palette;

protected:
	LPDIRECTDRAW2 ddraw2;
private:
	DriverInfo driver[MAXDRIVERS];
	int totaldrivers;

	DisplayModeInfo displaymode[MAXDISPLAYMODES];
	int curdisplaymode;
	int totaldisplaymodes;
	CRect displayrect;
	int displaydepth;

	BOOL window_active;
	static DirectDrawWin* thisptr;

	friend class DirectDrawApp;
	friend DirectDrawWin* GetDDWin();
};

inline DirectDrawWin* GetDDWin()
{
	return DirectDrawWin::thisptr;
}

void Fatal(LPCTSTR msg);


#ifdef _DEBUG

#undef ASSERT
#define ASSERT(c) \
	if (!(c)) \
	{ \
		if (GetDDWin()) \
		{ \
			GetDDWin()->GetDDraw()->RestoreDisplayMode(); \
			GetDDWin()->GetDDraw()->Release(); \
		} \
		AfxAssertFailedLine(THIS_FILE, __LINE__); \
		AfxDebugBreak(); \
	}

#endif _DEBUG

#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -