📄 dxutgui.h
字号:
D3DCOLOR m_colorTopRight;
D3DCOLOR m_colorBottomLeft;
D3DCOLOR m_colorBottomRight;
CDXUTDialogResourceManager* m_pManager;
PCALLBACKDXUTGUIEVENT m_pCallbackEvent;
void* m_pCallbackEventUserContext;
CGrowableArray< int > m_Textures; // Index into m_TextureCache;
CGrowableArray< int > m_Fonts; // Index into m_FontCache;
CGrowableArray< CDXUTControl* > m_Controls;
CGrowableArray< DXUTElementHolder* > m_DefaultElements;
CDXUTElement m_CapElement; // Element for the caption
CDXUTDialog* m_pNextDialog;
CDXUTDialog* m_pPrevDialog;
};
//--------------------------------------------------------------------------------------
// Structs for shared resources
//--------------------------------------------------------------------------------------
struct DXUTTextureNode
{
bool bFileSource; // True if this texture is loaded from a file. False if from resource.
HMODULE hResourceModule;
int nResourceID; // Resource ID. If 0, string-based ID is used and stored in strFilename.
WCHAR strFilename[MAX_PATH];
IDirect3DTexture9* pTexture;
DWORD dwWidth;
DWORD dwHeight;
};
struct DXUTFontNode
{
WCHAR strFace[MAX_PATH];
ID3DXFont* pFont;
LONG nHeight;
LONG nWeight;
};
//-----------------------------------------------------------------------------
// Manages shared resources of dialogs
//-----------------------------------------------------------------------------
class CDXUTDialogResourceManager
{
public:
CDXUTDialogResourceManager();
~CDXUTDialogResourceManager();
HRESULT OnCreateDevice( LPDIRECT3DDEVICE9 pd3dDevice );
HRESULT OnResetDevice();
void OnLostDevice();
void OnDestroyDevice();
bool MsgProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam );
int AddFont( LPCWSTR strFaceName, LONG height, LONG weight );
int AddTexture( LPCWSTR strFilename );
int AddTexture( LPCWSTR strResourceName, HMODULE hResourceModule );
DXUTFontNode* GetFontNode( int iIndex ) { return m_FontCache.GetAt( iIndex ); };
DXUTTextureNode* GetTextureNode( int iIndex ) { return m_TextureCache.GetAt( iIndex ); };
IDirect3DDevice9* GetD3DDevice() { return m_pd3dDevice; }
bool RegisterDialog( CDXUTDialog *pDialog );
void UnregisterDialog( CDXUTDialog *pDialog );
void EnableKeyboardInputForAllDialogs();
// Shared between all dialogs
IDirect3DStateBlock9* m_pStateBlock;
ID3DXSprite* m_pSprite; // Sprite used for drawing
CGrowableArray< CDXUTDialog* > m_Dialogs; // Dialogs registered
protected:
CGrowableArray< DXUTTextureNode* > m_TextureCache; // Shared textures
CGrowableArray< DXUTFontNode* > m_FontCache; // Shared fonts
IDirect3DDevice9* m_pd3dDevice;
// Resource creation helpers
HRESULT CreateFont( UINT index );
HRESULT CreateTexture( UINT index );
};
//-----------------------------------------------------------------------------
// Base class for controls
//-----------------------------------------------------------------------------
class CDXUTControl
{
public:
CDXUTControl( CDXUTDialog *pDialog = NULL );
virtual ~CDXUTControl();
virtual HRESULT OnInit() { return S_OK; }
virtual void Refresh();
virtual void Render( IDirect3DDevice9* pd3dDevice, float fElapsedTime ) { };
// Windows message handler
virtual bool MsgProc( UINT uMsg, WPARAM wParam, LPARAM lParam ) { return false; }
virtual bool HandleKeyboard( UINT uMsg, WPARAM wParam, LPARAM lParam ) { return false; }
virtual bool HandleMouse( UINT uMsg, POINT pt, WPARAM wParam, LPARAM lParam ) { return false; }
virtual bool CanHaveFocus() { return false; }
virtual void OnFocusIn() { m_bHasFocus = true; }
virtual void OnFocusOut() { m_bHasFocus = false; }
virtual void OnMouseEnter() { m_bMouseOver = true; }
virtual void OnMouseLeave() { m_bMouseOver = false; }
virtual void OnHotkey() {}
virtual BOOL ContainsPoint( POINT pt ) { return PtInRect( &m_rcBoundingBox, pt ); }
virtual void SetEnabled( bool bEnabled ) { m_bEnabled = bEnabled; }
virtual bool GetEnabled() { return m_bEnabled; }
virtual void SetVisible( bool bVisible ) { m_bVisible = bVisible; }
virtual bool GetVisible() { return m_bVisible; }
UINT GetType() const { return m_Type; }
int GetID() const { return m_ID; }
void SetID( int ID ) { m_ID = ID; }
void SetLocation( int x, int y ) { m_x = x; m_y = y; UpdateRects(); }
void SetSize( int width, int height ) { m_width = width; m_height = height; UpdateRects(); }
void SetHotkey( UINT nHotkey ) { m_nHotkey = nHotkey; }
UINT GetHotkey() { return m_nHotkey; }
void SetUserData( void *pUserData ) { m_pUserData = pUserData; }
void *GetUserData() const { return m_pUserData; }
virtual void SetTextColor( D3DCOLOR Color );
CDXUTElement* GetElement( UINT iElement ) { return m_Elements.GetAt( iElement ); }
HRESULT SetElement( UINT iElement, CDXUTElement* pElement);
bool m_bVisible; // Shown/hidden flag
bool m_bMouseOver; // Mouse pointer is above control
bool m_bHasFocus; // Control has input focus
bool m_bIsDefault; // Is the default control
// Size, scale, and positioning members
int m_x, m_y;
int m_width, m_height;
// These members are set by the container
CDXUTDialog* m_pDialog; // Parent container
UINT m_Index; // Index within the control list
CGrowableArray< CDXUTElement* > m_Elements; // All display elements
protected:
virtual void UpdateRects();
int m_ID; // ID number
DXUT_CONTROL_TYPE m_Type; // Control type, set once in constructor
UINT m_nHotkey; // Virtual key code for this control's hotkey
void *m_pUserData; // Data associated with this control that is set by user.
bool m_bEnabled; // Enabled/disabled flag
RECT m_rcBoundingBox; // Rectangle defining the active region of the control
};
//-----------------------------------------------------------------------------
// Contains all the display information for a given control type
//-----------------------------------------------------------------------------
struct DXUTElementHolder
{
UINT nControlType;
UINT iElement;
CDXUTElement Element;
};
//-----------------------------------------------------------------------------
// Static control
//-----------------------------------------------------------------------------
class CDXUTStatic : public CDXUTControl
{
public:
CDXUTStatic( CDXUTDialog *pDialog = NULL );
virtual void Render( IDirect3DDevice9* pd3dDevice, float fElapsedTime );
virtual BOOL ContainsPoint( POINT pt ) { return false; }
HRESULT GetTextCopy( LPWSTR strDest, UINT bufferCount );
LPCWSTR GetText() { return m_strText; }
HRESULT SetText( LPCWSTR strText );
protected:
WCHAR m_strText[MAX_PATH]; // Window text
};
//-----------------------------------------------------------------------------
// Button control
//-----------------------------------------------------------------------------
class CDXUTButton : public CDXUTStatic
{
public:
CDXUTButton( CDXUTDialog *pDialog = NULL );
virtual bool HandleKeyboard( UINT uMsg, WPARAM wParam, LPARAM lParam );
virtual bool HandleMouse( UINT uMsg, POINT pt, WPARAM wParam, LPARAM lParam );
virtual void OnHotkey() { if( m_pDialog->IsKeyboardInputEnabled() ) m_pDialog->RequestFocus( this ); m_pDialog->SendEvent( EVENT_BUTTON_CLICKED, true, this ); }
virtual BOOL ContainsPoint( POINT pt ) { return PtInRect( &m_rcBoundingBox, pt ); }
virtual bool CanHaveFocus() { return (m_bVisible && m_bEnabled); }
virtual void Render( IDirect3DDevice9* pd3dDevice, float fElapsedTime );
protected:
bool m_bPressed;
};
//-----------------------------------------------------------------------------
// CheckBox control
//-----------------------------------------------------------------------------
class CDXUTCheckBox : public CDXUTButton
{
public:
CDXUTCheckBox( CDXUTDialog *pDialog = NULL );
virtual bool HandleKeyboard( UINT uMsg, WPARAM wParam, LPARAM lParam );
virtual bool HandleMouse( UINT uMsg, POINT pt, WPARAM wParam, LPARAM lParam );
virtual void OnHotkey() { if( m_pDialog->IsKeyboardInputEnabled() ) m_pDialog->RequestFocus( this ); SetCheckedInternal( !m_bChecked, true ); }
virtual BOOL ContainsPoint( POINT pt );
virtual void UpdateRects();
virtual void Render( IDirect3DDevice9* pd3dDevice, float fElapsedTime );
bool GetChecked() { return m_bChecked; }
void SetChecked( bool bChecked ) { SetCheckedInternal( bChecked, false ); }
protected:
virtual void SetCheckedInternal( bool bChecked, bool bFromInput );
bool m_bChecked;
RECT m_rcButton;
RECT m_rcText;
};
//-----------------------------------------------------------------------------
// RadioButton control
//-----------------------------------------------------------------------------
class CDXUTRadioButton : public CDXUTCheckBox
{
public:
CDXUTRadioButton( CDXUTDialog *pDialog = NULL );
virtual bool HandleKeyboard( UINT uMsg, WPARAM wParam, LPARAM lParam );
virtual bool HandleMouse( UINT uMsg, POINT pt, WPARAM wParam, LPARAM lParam );
virtual void OnHotkey() { if( m_pDialog->IsKeyboardInputEnabled() ) m_pDialog->RequestFocus( this ); SetCheckedInternal( true, true, true ); }
void SetChecked( bool bChecked, bool bClearGroup=true ) { SetCheckedInternal( bChecked, bClearGroup, false ); }
void SetButtonGroup( UINT nButtonGroup ) { m_nButtonGroup = nButtonGroup; }
UINT GetButtonGroup() { return m_nButtonGroup; }
protected:
virtual void SetCheckedInternal( bool bChecked, bool bClearGroup, bool bFromInput );
UINT m_nButtonGroup;
};
//-----------------------------------------------------------------------------
// Scrollbar control
//-----------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -