?? dxutgui.h
字號:
//--------------------------------------------------------------------------------------
// File: DXUTgui.h
//
// Desc:
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//--------------------------------------------------------------------------------------
#pragma once
#ifndef DXUT_GUI_H
#define DXUT_GUI_H
#include <usp10.h>
#include <dimm.h>
//--------------------------------------------------------------------------------------
// Defines and macros
//--------------------------------------------------------------------------------------
#define EVENT_BUTTON_CLICKED 0x0101
#define EVENT_COMBOBOX_SELECTION_CHANGED 0x0201
#define EVENT_RADIOBUTTON_CHANGED 0x0301
#define EVENT_CHECKBOX_CHANGED 0x0401
#define EVENT_SLIDER_VALUE_CHANGED 0x0501
#define EVENT_EDITBOX_STRING 0x0601
// EVENT_EDITBOX_CHANGE is sent when the listbox content changes
// due to user input.
#define EVENT_EDITBOX_CHANGE 0x0602
#define EVENT_LISTBOX_ITEM_DBLCLK 0x0701
// EVENT_LISTBOX_SELECTION is fired off when the selection changes in
// a single selection list box.
#define EVENT_LISTBOX_SELECTION 0x0702
#define EVENT_LISTBOX_SELECTION_END 0x0703
//--------------------------------------------------------------------------------------
// Forward declarations
//--------------------------------------------------------------------------------------
class CDXUTDialogResourceManager;
class CDXUTControl;
class CDXUTButton;
class CDXUTStatic;
class CDXUTCheckBox;
class CDXUTRadioButton;
class CDXUTComboBox;
class CDXUTSlider;
class CDXUTEditBox;
class CDXUTIMEEditBox;
class CDXUTListBox;
class CDXUTScrollBar;
class CDXUTElement;
struct DXUTElementHolder;
struct DXUTTextureNode;
struct DXUTFontNode;
typedef VOID (CALLBACK *PCALLBACKDXUTGUIEVENT) ( UINT nEvent, int nControlID, CDXUTControl* pControl, void* pUserContext );
//--------------------------------------------------------------------------------------
// Enums for pre-defined control types
//--------------------------------------------------------------------------------------
enum DXUT_CONTROL_TYPE
{
DXUT_CONTROL_BUTTON,
DXUT_CONTROL_STATIC,
DXUT_CONTROL_CHECKBOX,
DXUT_CONTROL_RADIOBUTTON,
DXUT_CONTROL_COMBOBOX,
DXUT_CONTROL_SLIDER,
DXUT_CONTROL_EDITBOX,
DXUT_CONTROL_IMEEDITBOX,
DXUT_CONTROL_LISTBOX,
DXUT_CONTROL_SCROLLBAR,
};
enum DXUT_CONTROL_STATE
{
DXUT_STATE_NORMAL = 0,
DXUT_STATE_DISABLED,
DXUT_STATE_HIDDEN,
DXUT_STATE_FOCUS,
DXUT_STATE_MOUSEOVER,
DXUT_STATE_PRESSED,
};
#define MAX_CONTROL_STATES 6
struct DXUTBlendColor
{
void Init( D3DCOLOR defaultColor, D3DCOLOR disabledColor = D3DCOLOR_ARGB(200, 128, 128, 128), D3DCOLOR hiddenColor = 0 );
void Blend( UINT iState, float fElapsedTime, float fRate = 0.7f );
D3DCOLOR States[ MAX_CONTROL_STATES ]; // Modulate colors for all possible control states
D3DXCOLOR Current;
};
//-----------------------------------------------------------------------------
// Contains all the display tweakables for a sub-control
//-----------------------------------------------------------------------------
class CDXUTElement
{
public:
void SetTexture( UINT iTexture, RECT* prcTexture, D3DCOLOR defaultTextureColor = D3DCOLOR_ARGB(255, 255, 255, 255) );
void SetFont( UINT iFont, D3DCOLOR defaultFontColor = D3DCOLOR_ARGB(255, 255, 255, 255), DWORD dwTextFormat = DT_CENTER | DT_VCENTER );
void Refresh();
UINT iTexture; // Index of the texture for this Element
UINT iFont; // Index of the font for this Element
DWORD dwTextFormat; // The format argument to DrawText
RECT rcTexture; // Bounding rect of this element on the composite texture
DXUTBlendColor TextureColor;
DXUTBlendColor FontColor;
};
//-----------------------------------------------------------------------------
// All controls must be assigned to a dialog, which handles
// input and rendering for the controls.
//-----------------------------------------------------------------------------
class CDXUTDialog
{
friend class CDXUTDialogResourceManager;
public:
CDXUTDialog();
~CDXUTDialog();
// Need to call this now
void Init( CDXUTDialogResourceManager* pManager, bool bRegisterDialog = true );
void Init( CDXUTDialogResourceManager* pManager, bool bRegisterDialog, LPCWSTR pszControlTextureFilename );
void Init( CDXUTDialogResourceManager* pManager, bool bRegisterDialog, LPCWSTR szControlTextureResourceName, HMODULE hControlTextureResourceModule );
// Windows message handler
bool MsgProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam );
// Control creation
HRESULT AddStatic( int ID, LPCWSTR strText, int x, int y, int width, int height, bool bIsDefault=false, CDXUTStatic** ppCreated=NULL );
HRESULT AddButton( int ID, LPCWSTR strText, int x, int y, int width, int height, UINT nHotkey=0, bool bIsDefault=false, CDXUTButton** ppCreated=NULL );
HRESULT AddCheckBox( int ID, LPCWSTR strText, int x, int y, int width, int height, bool bChecked=false, UINT nHotkey=0, bool bIsDefault=false, CDXUTCheckBox** ppCreated=NULL );
HRESULT AddRadioButton( int ID, UINT nButtonGroup, LPCWSTR strText, int x, int y, int width, int height, bool bChecked=false, UINT nHotkey=0, bool bIsDefault=false, CDXUTRadioButton** ppCreated=NULL );
HRESULT AddComboBox( int ID, int x, int y, int width, int height, UINT nHotKey=0, bool bIsDefault=false, CDXUTComboBox** ppCreated=NULL );
HRESULT AddSlider( int ID, int x, int y, int width, int height, int min=0, int max=100, int value=50, bool bIsDefault=false, CDXUTSlider** ppCreated=NULL );
HRESULT AddEditBox( int ID, LPCWSTR strText, int x, int y, int width, int height, bool bIsDefault=false, CDXUTEditBox** ppCreated=NULL );
HRESULT AddIMEEditBox( int ID, LPCWSTR strText, int x, int y, int width, int height, bool bIsDefault=false, CDXUTIMEEditBox** ppCreated=NULL );
HRESULT AddListBox( int ID, int x, int y, int width, int height, DWORD dwStyle=0, CDXUTListBox** ppCreated=NULL );
HRESULT AddControl( CDXUTControl* pControl );
HRESULT InitControl( CDXUTControl* pControl );
// Control retrieval
CDXUTStatic* GetStatic( int ID ) { return (CDXUTStatic*) GetControl( ID, DXUT_CONTROL_STATIC ); }
CDXUTButton* GetButton( int ID ) { return (CDXUTButton*) GetControl( ID, DXUT_CONTROL_BUTTON ); }
CDXUTCheckBox* GetCheckBox( int ID ) { return (CDXUTCheckBox*) GetControl( ID, DXUT_CONTROL_CHECKBOX ); }
CDXUTRadioButton* GetRadioButton( int ID ) { return (CDXUTRadioButton*) GetControl( ID, DXUT_CONTROL_RADIOBUTTON ); }
CDXUTComboBox* GetComboBox( int ID ) { return (CDXUTComboBox*) GetControl( ID, DXUT_CONTROL_COMBOBOX ); }
CDXUTSlider* GetSlider( int ID ) { return (CDXUTSlider*) GetControl( ID, DXUT_CONTROL_SLIDER ); }
CDXUTEditBox* GetEditBox( int ID ) { return (CDXUTEditBox*) GetControl( ID, DXUT_CONTROL_EDITBOX ); }
CDXUTIMEEditBox* GetIMEEditBox( int ID ) { return (CDXUTIMEEditBox*) GetControl( ID, DXUT_CONTROL_IMEEDITBOX ); }
CDXUTListBox* GetListBox( int ID ) { return (CDXUTListBox*) GetControl( ID, DXUT_CONTROL_LISTBOX ); }
CDXUTControl* GetControl( int ID );
CDXUTControl* GetControl( int ID, UINT nControlType );
CDXUTControl* GetControlAtPoint( POINT pt );
bool GetControlEnabled( int ID );
void SetControlEnabled( int ID, bool bEnabled );
void ClearRadioButtonGroup( UINT nGroup );
void ClearComboBox( int ID );
// Access the default display Elements used when adding new controls
HRESULT SetDefaultElement( UINT nControlType, UINT iElement, CDXUTElement* pElement );
CDXUTElement* GetDefaultElement( UINT nControlType, UINT iElement );
// Methods called by controls
void SendEvent( UINT nEvent, bool bTriggeredByUser, CDXUTControl* pControl );
void RequestFocus( CDXUTControl* pControl );
// Render helpers
HRESULT DrawRect( RECT* pRect, D3DCOLOR color );
HRESULT DrawPolyLine( POINT* apPoints, UINT nNumPoints, D3DCOLOR color );
HRESULT DrawSprite( CDXUTElement* pElement, RECT* prcDest );
HRESULT CalcTextRect( LPCWSTR strText, CDXUTElement* pElement, RECT* prcDest, int nCount = -1 );
HRESULT DrawText( LPCWSTR strText, CDXUTElement* pElement, RECT* prcDest, bool bShadow = false, int nCount = -1 );
// Attributes
bool GetVisible() { return m_bVisible; }
void SetVisible( bool bVisible ) { m_bVisible = bVisible; }
bool GetMinimized() { return m_bMinimized; }
void SetMinimized( bool bMinimized ) { m_bMinimized = bMinimized; }
void SetBackgroundColors( D3DCOLOR colorAllCorners ) { SetBackgroundColors( colorAllCorners, colorAllCorners, colorAllCorners, colorAllCorners ); }
void SetBackgroundColors( D3DCOLOR colorTopLeft, D3DCOLOR colorTopRight, D3DCOLOR colorBottomLeft, D3DCOLOR colorBottomRight );
void EnableCaption( bool bEnable ) { m_bCaption = bEnable; }
int GetCaptionHeight() const { return m_nCaptionHeight; }
void SetCaptionHeight( int nHeight ) { m_nCaptionHeight = nHeight; }
void SetCaptionText( const WCHAR *pwszText ) { StringCchCopy( m_wszCaption, sizeof(m_wszCaption)/sizeof(m_wszCaption[0]), pwszText); }
void GetLocation( POINT &Pt ) const { Pt.x = m_x; Pt.y = m_y; }
void SetLocation( int x, int y ) { m_x = x; m_y = y; }
void SetSize( int width, int height ) { m_width = width; m_height = height; }
int GetWidth() { return m_width; }
int GetHeight() { return m_height; }
static void SetRefreshTime( float fTime ){ s_fTimeRefresh = fTime; }
static CDXUTControl* GetNextControl( CDXUTControl* pControl );
static CDXUTControl* GetPrevControl( CDXUTControl* pControl );
void RemoveControl( int ID );
void RemoveAllControls();
// Sets the callback used to notify the app of control events
void SetCallback( PCALLBACKDXUTGUIEVENT pCallback, void* pUserContext = NULL );
void EnableNonUserEvents( bool bEnable ) { m_bNonUserEvents = bEnable; }
void EnableKeyboardInput( bool bEnable ) { m_bKeyboardInput = bEnable; }
void EnableMouseInput( bool bEnable ) { m_bMouseInput = bEnable; }
bool IsKeyboardInputEnabled() const { return m_bKeyboardInput; }
// Device state notification
void Refresh();
HRESULT OnRender( float fElapsedTime );
// Shared resource access. Indexed fonts and textures are shared among
// all the controls.
HRESULT SetFont( UINT index, LPCWSTR strFaceName, LONG height, LONG weight );
DXUTFontNode* GetFont( UINT index );
HRESULT SetTexture( UINT index, LPCWSTR strFilename );
HRESULT SetTexture( UINT index, LPCWSTR strResourceName, HMODULE hResourceModule );
DXUTTextureNode* GetTexture( UINT index );
CDXUTDialogResourceManager* GetManager() { return m_pManager; }
static void ClearFocus();
void FocusDefaultControl();
bool m_bNonUserEvents;
bool m_bKeyboardInput;
bool m_bMouseInput;
private:
int m_nDefaultControlID;
static double s_fTimeRefresh;
double m_fTimeLastRefresh;
// Initialize default Elements
void InitDefaultElements();
// Windows message handlers
void OnMouseMove( POINT pt );
void OnMouseUp( POINT pt );
void SetNextDialog( CDXUTDialog* pNextDialog );
// Control events
bool OnCycleFocus( bool bForward );
static CDXUTControl* s_pControlFocus; // The control which has focus
static CDXUTControl* s_pControlPressed; // The control currently pressed
CDXUTControl* m_pControlMouseOver; // The control which is hovered over
bool m_bVisible;
bool m_bCaption;
bool m_bMinimized;
bool m_bDrag;
WCHAR m_wszCaption[256];
int m_x;
int m_y;
int m_width;
int m_height;
int m_nCaptionHeight;
D3DCOLOR m_colorTopLeft;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -