📄 dxutgui.h
字号:
protected:
// ARROWSTATE indicates the state of the arrow buttons.
// CLEAR No arrow is down.
// CLICKED_UP Up arrow is clicked.
// CLICKED_DOWN Down arrow is clicked.
// HELD_UP Up arrow is held down for sustained period.
// HELD_DOWN Down arrow is held down for sustained period.
enum ARROWSTATE { CLEAR, CLICKED_UP, CLICKED_DOWN, HELD_UP, HELD_DOWN };
void UpdateThumbRect();
void Cap(); // Clips position at boundaries. Ensures it stays within legal range.
bool m_bShowThumb;
RECT m_rcUpButton;
RECT m_rcDownButton;
RECT m_rcTrack;
RECT m_rcThumb;
int m_nPosition; // Position of the first displayed item
int m_nPageSize; // How many items are displayable in one page
int m_nStart; // First item
int m_nEnd; // The index after the last item
POINT m_LastMouse;// Last mouse position
ARROWSTATE m_Arrow; // State of the arrows
double m_dArrowTS; // Timestamp of last arrow event.
};
//-----------------------------------------------------------------------------
// ListBox control
//-----------------------------------------------------------------------------
struct DXUTListBoxItem
{
WCHAR strText[256];
void* pData;
RECT rcActive;
bool bSelected;
};
class CDXUTListBox : public CDXUTControl
{
public:
CDXUTListBox( CDXUTDialog *pDialog = NULL );
virtual ~CDXUTListBox();
virtual HRESULT OnInit() { return m_pDialog->InitControl( &m_ScrollBar ); }
virtual bool CanHaveFocus() { return (m_bVisible && m_bEnabled); }
virtual bool HandleKeyboard( UINT uMsg, WPARAM wParam, LPARAM lParam );
virtual bool HandleMouse( UINT uMsg, POINT pt, WPARAM wParam, LPARAM lParam );
virtual void Render( IDirect3DDevice9* pd3dDevice, float fElapsedTime );
virtual void UpdateRects();
DWORD GetStyle() const { return m_dwStyle; }
int GetSize() const { return m_Items.GetSize(); }
void SetStyle( DWORD dwStyle ) { m_dwStyle = dwStyle; }
void SetScrollBarWidth( int nWidth ) { m_nSBWidth = nWidth; UpdateRects(); }
void SetBorder( int nBorder, int nMargin ) { m_nBorder = nBorder; m_nMargin = nMargin; }
HRESULT AddItem( const WCHAR *wszText, void *pData );
HRESULT InsertItem( int nIndex, const WCHAR *wszText, void *pData );
void RemoveItem( int nIndex );
void RemoveItemByText( WCHAR *wszText );
void RemoveItemByData( void *pData );
void RemoveAllItems();
DXUTListBoxItem *GetItem( int nIndex );
int GetSelectedIndex( int nPreviousSelected = -1 );
DXUTListBoxItem *GetSelectedItem( int nPreviousSelected = -1 ) { return GetItem( GetSelectedIndex( nPreviousSelected ) ); }
void SelectItem( int nNewIndex );
enum STYLE { MULTISELECTION = 1 };
protected:
RECT m_rcText; // Text rendering bound
RECT m_rcSelection; // Selection box bound
CDXUTScrollBar m_ScrollBar;
int m_nSBWidth;
int m_nBorder;
int m_nMargin;
int m_nTextHeight; // Height of a single line of text
DWORD m_dwStyle; // List box style
int m_nSelected; // Index of the selected item for single selection list box
int m_nSelStart; // Index of the item where selection starts (for handling multi-selection)
bool m_bDrag; // Whether the user is dragging the mouse to select
CGrowableArray< DXUTListBoxItem* > m_Items;
};
//-----------------------------------------------------------------------------
// ComboBox control
//-----------------------------------------------------------------------------
struct DXUTComboBoxItem
{
WCHAR strText[256];
void* pData;
RECT rcActive;
bool bVisible;
};
class CDXUTComboBox : public CDXUTButton
{
public:
CDXUTComboBox( CDXUTDialog *pDialog = NULL );
virtual ~CDXUTComboBox();
virtual void SetTextColor( D3DCOLOR Color );
virtual HRESULT OnInit() { return m_pDialog->InitControl( &m_ScrollBar ); }
virtual bool HandleKeyboard( UINT uMsg, WPARAM wParam, LPARAM lParam );
virtual bool HandleMouse( UINT uMsg, POINT pt, WPARAM wParam, LPARAM lParam );
virtual void OnHotkey();
virtual bool CanHaveFocus() { return (m_bVisible && m_bEnabled); }
virtual void OnFocusOut();
virtual void Render( IDirect3DDevice9* pd3dDevice, float fElapsedTime );
virtual void UpdateRects();
HRESULT AddItem( const WCHAR* strText, void* pData );
void RemoveAllItems();
void RemoveItem( UINT index );
bool ContainsItem( const WCHAR* strText, UINT iStart=0 );
int FindItem( const WCHAR* strText, UINT iStart=0 );
void* GetItemData( const WCHAR* strText );
void SetDropHeight( UINT nHeight ) { m_nDropHeight = nHeight; UpdateRects(); }
void SetScrollBarWidth( int nWidth ) { m_nSBWidth = nWidth; UpdateRects(); }
void* GetSelectedData();
DXUTComboBoxItem* GetSelectedItem();
UINT GetNumItems() { return m_Items.GetSize(); }
DXUTComboBoxItem* GetItem( UINT index ) { return m_Items.GetAt( index ); }
HRESULT SetSelectedByIndex( UINT index );
HRESULT SetSelectedByText( const WCHAR* strText );
HRESULT SetSelectedByData( void* pData );
protected:
int m_iSelected;
int m_iFocused;
int m_nDropHeight;
CDXUTScrollBar m_ScrollBar;
int m_nSBWidth;
bool m_bOpened;
RECT m_rcText;
RECT m_rcButton;
RECT m_rcDropdown;
RECT m_rcDropdownText;
CGrowableArray< DXUTComboBoxItem* > m_Items;
};
//-----------------------------------------------------------------------------
// Slider control
//-----------------------------------------------------------------------------
class CDXUTSlider : public CDXUTControl
{
public:
CDXUTSlider( CDXUTDialog *pDialog = NULL );
virtual BOOL ContainsPoint( POINT pt );
virtual bool CanHaveFocus() { return (m_bVisible && m_bEnabled); }
virtual bool HandleKeyboard( UINT uMsg, WPARAM wParam, LPARAM lParam );
virtual bool HandleMouse( UINT uMsg, POINT pt, WPARAM wParam, LPARAM lParam );
virtual void UpdateRects();
virtual void Render( IDirect3DDevice9* pd3dDevice, float fElapsedTime );
void SetValue( int nValue ) { SetValueInternal( nValue, false ); }
int GetValue() { return m_nValue; };
void SetRange( int nMin, int nMax );
protected:
void SetValueInternal( int nValue, bool bFromInput );
int ValueFromPos( int x );
int m_nValue;
int m_nMin;
int m_nMax;
int m_nDragX; // Mouse position at start of drag
int m_nDragOffset; // Drag offset from the center of the button
int m_nButtonX;
bool m_bPressed;
RECT m_rcButton;
};
//-----------------------------------------------------------------------------
// EditBox control
//-----------------------------------------------------------------------------
#define UNISCRIBE_DLLNAME L"\\usp10.dll"
#define GETPROCADDRESS( Module, APIName, Temp ) \
Temp = GetProcAddress( Module, #APIName ); \
if( Temp ) \
*(FARPROC*)&_##APIName = Temp
#define PLACEHOLDERPROC( APIName ) \
_##APIName = Dummy_##APIName
class CDXUTEditBox : public CDXUTControl
{
friend class CExternalApiInitializer;
public:
CDXUTEditBox( CDXUTDialog *pDialog = NULL );
virtual ~CDXUTEditBox();
virtual bool HandleKeyboard( UINT uMsg, WPARAM wParam, LPARAM lParam );
virtual bool HandleMouse( UINT uMsg, POINT pt, WPARAM wParam, LPARAM lParam );
virtual bool MsgProc( UINT uMsg, WPARAM wParam, LPARAM lParam );
virtual void UpdateRects();
virtual bool CanHaveFocus() { return (m_bVisible && m_bEnabled); }
virtual void Render( IDirect3DDevice9* pd3dDevice, float fElapsedTime );
virtual void OnFocusIn();
void SetText( LPCWSTR wszText, bool bSelected = false );
LPCWSTR GetText() { return m_Buffer.GetBuffer(); }
int GetTextLength() { return m_Buffer.GetTextSize(); } // Returns text length in chars excluding NULL.
HRESULT GetTextCopy( LPWSTR strDest, UINT bufferCount );
void ClearText();
virtual void SetTextColor( D3DCOLOR Color ) { m_TextColor = Color; } // Text color
void SetSelectedTextColor( D3DCOLOR Color ) { m_SelTextColor = Color; } // Selected text color
void SetSelectedBackColor( D3DCOLOR Color ) { m_SelBkColor = Color; } // Selected background color
void SetCaretColor( D3DCOLOR Color ) { m_CaretColor = Color; } // Caret color
void SetBorderWidth( int nBorder ) { m_nBorder = nBorder; UpdateRects(); } // Border of the window
void SetSpacing( int nSpacing ) { m_nSpacing = nSpacing; UpdateRects(); }
void ParseFloatArray( float *pNumbers, int nCount );
void SetTextFloatArray( const float *pNumbers, int nCount );
public:
//-----------------------------------------------------------------------------
// CUniBuffer class for the edit control
//-----------------------------------------------------------------------------
class CUniBuffer
{
friend class CExternalApiInitializer;
// static member
// Empty implementation of the Uniscribe API
static HRESULT WINAPI Dummy_ScriptApplyDigitSubstitution( const SCRIPT_DIGITSUBSTITUTE*, SCRIPT_CONTROL*, SCRIPT_STATE* ) { return E_NOTIMPL; }
static HRESULT WINAPI Dummy_ScriptStringAnalyse( HDC, const void *, int, int, int, DWORD, int, SCRIPT_CONTROL*, SCRIPT_STATE*, const int*, SCRIPT_TABDEF*, const BYTE*, SCRIPT_STRING_ANALYSIS* ) { return E_NOTIMPL; }
static HRESULT WINAPI Dummy_ScriptStringCPtoX( SCRIPT_STRING_ANALYSIS, int, BOOL, int* ) { return E_NOTIMPL; }
static HRESULT WINAPI Dummy_ScriptStringXtoCP( SCRIPT_STRING_ANALYSIS, int, int*, int* ) { return E_NOTIMPL; }
static HRESULT WINAPI Dummy_ScriptStringFree( SCRIPT_STRING_ANALYSIS* ) { return E_NOTIMPL; }
static const SCRIPT_LOGATTR* WINAPI Dummy_ScriptString_pLogAttr( SCRIPT_STRING_ANALYSIS ) { return NULL; }
static const int* WINAPI Dummy_ScriptString_pcOutChars( SCRIPT_STRING_ANALYSIS ) { return NULL; }
// Function pointers
static HRESULT (WINAPI *_ScriptApplyDigitSubstitution)( const SCRIPT_DIGITSUBSTITUTE*, SCRIPT_CONTROL*, SCRIPT_STATE* );
static HRESULT (WINAPI *_ScriptStringAnalyse)( HDC, const void *, int, int, int, DWORD, int, SCRIPT_CONTROL*, SCRIPT_STATE*, const int*, SCRIPT_TABDEF*, const BYTE*, SCRIPT_STRING_ANALYSIS* );
static HRESULT (WINAPI *_ScriptStringCPtoX)( SCRIPT_STRING_ANALYSIS, int, BOOL, int* );
static HRESULT (WINAPI *_ScriptStringXtoCP)( SCRIPT_STRING_ANALYSIS, int, int*, int* );
static HRESULT (WINAPI *_ScriptStringFree)( SCRIPT_STRING_ANALYSIS* );
static const SCRIPT_LOGATTR* (WINAPI *_ScriptString_pLogAttr)( SCRIPT_STRING_ANALYSIS );
static const int* (WINAPI *_ScriptString_pcOutChars)( SCRIPT_STRING_ANALYSIS );
static void InitializeUniscribe();
static void UninitializeUniscribe();
static HINSTANCE s_hDll; // Uniscribe DLL handle
// Instance data
private:
WCHAR *m_pwszBuffer; // Buffer to hold text
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -