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

📄 menubase.h

📁 Blood 2全套源码
💻 H
字号:
// MenuBase.h: interface for the CMenuBase class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_MENUBASE_H__D7668B31_57D4_11D2_BDA0_0060971BDC6D__INCLUDED_)
#define AFX_MENUBASE_H__D7668B31_57D4_11D2_BDA0_0060971BDC6D__INCLUDED_

#if _MSC_VER >= 1000
#pragma once
#endif // _MSC_VER >= 1000

#include "LTGUIMgr.h"
#include "stdlith.h"

class CMainMenus;
class CLTGUIFadeItemCtrl;
class CLTGUITextItemCtrl;
class CMenuBase : public CLTGUICommandHandler
{
public:
	CMenuBase();
	virtual ~CMenuBase();

	// Initialization/Termination
	virtual	DBOOL	Init(CClientDE *pClientDE, CMainMenus *pMainMenus,
						 CMenuBase *pParentMenu, DWORD dwMenuID, int nMenuHeight);
	virtual void	Term();

	// Builds the menu
	virtual void	Build()								{ m_bBuilt=DTRUE; }
	DBOOL			IsBuilt()							{ return m_bBuilt; }

	// Get the parent menu
	CMenuBase		*GetParentMenu()					{ return m_pParentMenu; }

	// Get the background of the menu
	char			*GetBackground()					{ return m_szBackground; }

	// Get the main menus class
	CMainMenus		*GetMainMenus()						{ return m_pMainMenus; }

	// Get the menu ID
	DDWORD			GetMenuID()							{ return m_dwMenuID; }

	// Renders the menu to a surface
	virtual void	Render(HSURFACE hDestSurf);

	// Creates the title for the menu from the path to the image.  The non-Enlish version
	// overwrites the surface with a text string specified by the string ID.
	DBOOL			CreateTitle(char *lpszTitleSurf, int nStringID, DIntPt titlePos);

	// This is called when the menu gets or loses focus
	virtual void	OnFocus(DBOOL bFocus)				{ }

	/////////////////////////////////////////
	// Adds a menu options using an HSTRING
	CLTGUIFadeItemCtrl		*AddFadeItemOption(char *lpszOptionSurfPrefix, int nSurfaces, HSTRING hOptionText, DWORD dwCommandID, int xPos=-1, int yPos=-1);
	CLTGUITextItemCtrl		*AddTextItemOption(HSTRING hText, DWORD dwCommandID, CLTGUIFont *pFontArray, int nNumFonts=1, DBOOL bDrawSolid=DTRUE, int *pnValue=DNULL);
	CLTGUIColumnTextCtrl	*AddColumnTextOption(DWORD dwCommandID, CLTGUIFont *pFont);
	CLTGUISliderCtrl		*AddSliderOption(HSTRING hText, CLTGUIFont *pFont, int nSliderOffset, HSURFACE hBarSurf, HSURFACE hTabSurf, int *pnValue=DNULL);
	CLTGUIOnOffCtrl			*AddOnOffOption(HSTRING hText, CLTGUIFont *pFont, int nRightColumnOffset, DBOOL *pbValue=DNULL);
	CLTGUIEditCtrl			*AddEditOption(HSTRING hDescription, DWORD dwCommandID, CLTGUIFont *pFont, int nEditStringOffset, int nBufferSize, char *lpszValue=DNULL);

	// Just a wrapper for adding fading text options with large fonts
	CLTGUITextItemCtrl		*AddLargeTextItemOption(HSTRING hText, DWORD dwCommandID);	

	///////////////////////////////////////////////////////////////////////////////////
	// Wrappers for adding menu items with a resource string ID instead of an HSTRING
	CLTGUIFadeItemCtrl		*AddFadeItemOption(char *lpszOptionSurfPrefix, int nSurfaces, int messageCode, DWORD dwCommandID, int xPos=-1, int yPos=-1);
	CLTGUITextItemCtrl		*AddTextItemOption(int messageCode, DWORD dwCommandID, CLTGUIFont *pFontArray, int nNumFonts=1, DBOOL bDrawSolid=DTRUE, int *pnValue=DNULL);	
	CLTGUISliderCtrl		*AddSliderOption(int messageCode, CLTGUIFont *pFont, int nSliderOffset, HSURFACE hBarSurf, HSURFACE hTabSurf, int *pnValue=DNULL);
	CLTGUIOnOffCtrl			*AddOnOffOption(int messageCode, CLTGUIFont *pFont, int nRightColumnOffset, DBOOL *pbValue=DNULL);
	CLTGUIEditCtrl			*AddEditOption(int messageCode, DWORD dwCommandID, CLTGUIFont *pFont, int nEditStringOffset, int nBufferSize, char *lpszValue=DNULL);	
	CLTGUITextItemCtrl		*AddLargeTextItemOption(int messageCode, DWORD dwCommandID);	

	///////////////////////////////////////////////////////////////////////////////////
	// Wrappers for adding menu items with a char* instead of a string ID or HSTRING
	inline CLTGUIFadeItemCtrl	*AddFadeItemOption(char *lpszOptionSurfPrefix, int nSurfaces, char *lpszOptionText, DWORD dwCommandID, int xPos=-1, int yPos=-1);
	inline CLTGUITextItemCtrl	*AddTextItemOption(char *lpszText, DWORD dwCommandID, CLTGUIFont *pFontArray, int nNumFonts=1, DBOOL bDrawSolid=DTRUE, int *pnValue=DNULL);	
	inline CLTGUISliderCtrl		*AddSliderOption(char *lpszText, CLTGUIFont *pFont, int nSliderOffset, HSURFACE hBarSurf, HSURFACE hTabSurf, int *pnValue=DNULL);
	inline CLTGUIOnOffCtrl		*AddOnOffOption(char *lpszText, CLTGUIFont *pFont, int nRightColumnOffset, DBOOL *pbValue=DNULL);
	inline CLTGUIEditCtrl		*AddEditOption(char *lpszDescription, DWORD dwCommandID, CLTGUIFont *pFont, int nEditStringOffset, int nBufferSize, char *lpszValue=DNULL);
	inline CLTGUITextItemCtrl	*AddLargeTextItemOption(char *lspzText, DWORD dwCommandID);	

	// Sets the parent menu
	void			SetParentMenu(CMenuBase *pParent)	{ m_pParentMenu=pParent; }

	// Calls UpdateData on each control in the menu
	void			UpdateData(DBOOL bSaveAndValidate=DTRUE);

	// Set the current menu item selection index.  Note that this will reset any animations.
	void			SetCurrentItem ( int nItemIndex );

	// Gets the currently selected item
	int				GetCurrentItemIndex()				{ return m_listOption.GetSelectedItem(); }
	CLTGUICtrl		*GetCurrentItem();

	// Sets the position of the title and menu option
	void			SetTitlePos(int x, int y)			{ m_titlePos.x=x; m_titlePos.y=y; }
	void			SetTitlePos(DIntPt pt)				{ SetTitlePos(pt.x, pt.y); }
	void			SetOptionPos(int x, int y)			{ m_listOption.SetPos(x, y); }
	void			SetOptionPos(DIntPt pt)				{ SetOptionPos(pt.x, pt.y); }

	// Sets the height of the menu
	void			SetMenuHeight(int nHeight)			{ m_listOption.SetHeight(nHeight); }

	// Turns on and off low resolution fonts for the menus
	void			SetLowResolutionFonts(DBOOL bLowRes);

	// Sets the item spacing
	void			SetItemSpacing(int nSpacing)		{ m_listOption.SetItemSpacing(nSpacing); }

	// Sets whether or not the items should wrap when scrolling
	void			SetScrollWrap(DBOOL bWrap)			{ m_listOption.SetScrollWrap(bWrap); }

	// Turns the up/down arrows on/off and sets the X position that they should be pointing
	void			UseArrows(DBOOL bUse, int xCenter);

	// Handles a key press.  Returns FALSE if the key was not processed through this method.
	// Left, Up, Down, Right, and Enter are automatically passed through OnUp(), OnDown(), etc.
	virtual	DBOOL	HandleKeyDown(int key, int rep);

	// Handle a device tracking message.
	// Return DTRUE if the device tracking should stop.
	virtual DBOOL	HandleDeviceTrack(DeviceInput *pInput, DDWORD dwNumDevices);

protected:
	virtual DDWORD	OnCommand(DDWORD dwCommand, DDWORD dwParam1, DDWORD dwParam2);

	// Handle input
	virtual void	OnUp();
	virtual void	OnDown();
	virtual void	OnLeft();
	virtual void	OnRight();
	virtual void	OnEnter();	

	// Removes all of the options from the menu
	void		RemoveAllOptions();

	// Sorts a file list.  This was taken from the old menu code.
	FileEntry*	SortFileList(FileEntry *pfe);

	// Renders the up/down arrows
	void		RenderArrows(HSURFACE hDestSurf);

protected:
	DBOOL			m_bInit;
	DBOOL			m_bBuilt;

	CClientDE		*m_pClientDE;		// Client interface
	CMainMenus		*m_pMainMenus;		// The main menus class

	DDWORD			m_dwMenuID;			// The ID of this menu
	CMenuBase		*m_pParentMenu;		// The parent menu

	HSURFACE		m_hTitleSurf;		// The title surface
	HSTRING			m_hTitleString;		// The title string

	DIntPt			m_titlePos;			// The title position
	CLTGUIListCtrl	m_listOption;		// The list of menu items	

	char			*m_szBackground;	// The name of the file to use as the background
	DBOOL			m_bBoxFormat;		// Should we format the list options in a box? or have free locations

	DBOOL			m_bShowArrows;		// TRUE if the up/down arrows should be drawn
	int				m_nArrowCenter;		// The X coordinate of where the arrow center should be

	// Array of controls that this menu owns
	CMoArray<CLTGUICtrl *>	m_controlArray;	

	// Stores controls added by AddLargeTextItemOption
	CMoArray<CLTGUITextItemCtrl *>	m_largeFontItemArray;
};

inline CLTGUIFadeItemCtrl *CMenuBase::AddFadeItemOption(char *lpszOptionSurfPrefix, int nSurfaces, char *lpszOptionText, DWORD dwCommandID, int xPos, int yPos)
{
	HSTRING hString=m_pClientDE->CreateString(lpszOptionText);
	CLTGUIFadeItemCtrl *pCtrl=AddFadeItemOption(lpszOptionSurfPrefix, nSurfaces, hString, dwCommandID, xPos, yPos);
	m_pClientDE->FreeString(hString);

	return pCtrl;
}

inline CLTGUITextItemCtrl *CMenuBase::AddTextItemOption(char *lpszText, DWORD dwCommandID, CLTGUIFont *pFontArray, int nNumFonts, DBOOL bDrawSolid, int *pnValue)
{
	HSTRING hString=m_pClientDE->CreateString(lpszText);
	CLTGUITextItemCtrl *pCtrl=AddTextItemOption(hString, dwCommandID, pFontArray, nNumFonts, bDrawSolid, pnValue);
	m_pClientDE->FreeString(hString);

	return pCtrl;
}


inline CLTGUISliderCtrl *CMenuBase::AddSliderOption(char *lpszText, CLTGUIFont *pFont, int nSliderOffset, HSURFACE hBarSurf, HSURFACE hTabSurf, int *pnValue)
{
	HSTRING hString=m_pClientDE->CreateString(lpszText);
	CLTGUISliderCtrl *pCtrl=AddSliderOption(hString, pFont, nSliderOffset, hBarSurf, hTabSurf, pnValue);
	m_pClientDE->FreeString(hString);

	return pCtrl;
}

inline CLTGUIOnOffCtrl *CMenuBase::AddOnOffOption(char *lpszText, CLTGUIFont *pFont, int nRightColumnOffset, DBOOL *pbValue)
{
	HSTRING hString=m_pClientDE->CreateString(lpszText);
	CLTGUIOnOffCtrl *pCtrl=AddOnOffOption(hString, pFont, nRightColumnOffset, pbValue);
	m_pClientDE->FreeString(hString);

	return pCtrl;
}

inline CLTGUIEditCtrl *CMenuBase::AddEditOption(char *lpszDescription, DWORD dwCommandID, CLTGUIFont *pFont, int nEditStringOffset, int nBufferSize, char *lpszValue)
{
	HSTRING hString=m_pClientDE->CreateString(lpszDescription);
	CLTGUIEditCtrl *pCtrl=AddEditOption(hString, dwCommandID, pFont, nEditStringOffset, nBufferSize, lpszValue);
	m_pClientDE->FreeString(hString);

	return pCtrl;
}

inline CLTGUITextItemCtrl *CMenuBase::AddLargeTextItemOption(char *lpszText, DWORD dwCommandID)
{
	HSTRING hString=m_pClientDE->CreateString(lpszText);
	CLTGUITextItemCtrl *pCtrl=AddLargeTextItemOption(lpszText, dwCommandID);
	m_pClientDE->FreeString(hString);

	return pCtrl;
}

#endif // !defined(AFX_MENUBASE_H__D7668B31_57D4_11D2_BDA0_0060971BDC6D__INCLUDED_)

⌨️ 快捷键说明

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