DXUTgui.h
资源名称:Direct3D.rar [点击查看]
上传用户:junlon
上传日期:2022-01-05
资源大小:39075k
文件大小:48k
源码类别:
DirextX编程
开发平台:
Visual C++
- //--------------------------------------------------------------------------------------
- // 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;
- 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
- //-----------------------------------------------------------------------------
- class CDXUTScrollBar : public CDXUTControl
- {
- public:
- CDXUTScrollBar( CDXUTDialog *pDialog = NULL );
- virtual ~CDXUTScrollBar();
- 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 Render( IDirect3DDevice9* pd3dDevice, float fElapsedTime );
- virtual void UpdateRects();
- void SetTrackRange( int nStart, int nEnd );
- int GetTrackPos() { return m_nPosition; }
- void SetTrackPos( int nPosition ) { m_nPosition = nPosition; Cap(); UpdateThumbRect(); }
- int GetPageSize() { return m_nPageSize; }
- void SetPageSize( int nPageSize ) { m_nPageSize = nPageSize; Cap(); UpdateThumbRect(); }
- void Scroll( int nDelta ); // Scroll by nDelta items (plus or minus)
- void ShowItem( int nIndex ); // Ensure that item nIndex is displayed, scroll if necessary
- 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;
- bool m_bDrag;
- 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 bool MsgProc( UINT uMsg, 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; }
- int GetScrollBarWidth() const { return m_nSBWidth; }
- 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* GetItemData( int nIndex );
- void SetDropHeight( UINT nHeight ) { m_nDropHeight = nHeight; UpdateRects(); }
- int GetScrollBarWidth() const { return m_nSBWidth; }
- 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() const { return m_nValue; };
- void GetRange( int &nMin, int &nMax ) const { nMin = m_nMin; nMax = m_nMax; }
- 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;
- };
- //-----------------------------------------------------------------------------
- // CUniBuffer class for the edit control
- //-----------------------------------------------------------------------------
- class CUniBuffer
- {
- public:
- CUniBuffer( int nInitialSize = 1 );
- ~CUniBuffer();
- static void Initialize();
- static void Uninitialize();
- int GetBufferSize() { return m_nBufferSize; }
- bool SetBufferSize( int nSize );
- int GetTextSize() { return lstrlenW( m_pwszBuffer ); }
- const WCHAR* GetBuffer() { return m_pwszBuffer; }
- const WCHAR& operator[]( int n ) const { return m_pwszBuffer[n]; }
- WCHAR& operator[]( int n );
- DXUTFontNode* GetFontNode() { return m_pFontNode; }
- void SetFontNode( DXUTFontNode *pFontNode ) { m_pFontNode = pFontNode; }
- void Clear();
- bool InsertChar( int nIndex, WCHAR wChar ); // Inserts the char at specified index. If nIndex == -1, insert to the end.
- bool RemoveChar( int nIndex ); // Removes the char at specified index. If nIndex == -1, remove the last char.
- bool InsertString( int nIndex, const WCHAR *pStr, int nCount = -1 ); // Inserts the first nCount characters of the string pStr at specified index. If nCount == -1, the entire string is inserted. If nIndex == -1, insert to the end.
- bool SetText( LPCWSTR wszText );
- // Uniscribe
- HRESULT CPtoX( int nCP, BOOL bTrail, int *pX );
- HRESULT XtoCP( int nX, int *pCP, int *pnTrail );
- void GetPriorItemPos( int nCP, int *pPrior );
- void GetNextItemPos( int nCP, int *pPrior );
- private:
- HRESULT Analyse(); // Uniscribe -- Analyse() analyses the string in the buffer
- WCHAR* m_pwszBuffer; // Buffer to hold text
- int m_nBufferSize; // Size of the buffer allocated, in characters
- // Uniscribe-specific
- DXUTFontNode* m_pFontNode; // Font node for the font that this buffer uses
- bool m_bAnalyseRequired; // True if the string has changed since last analysis.
- SCRIPT_STRING_ANALYSIS m_Analysis; // Analysis for the current string
- private:
- // 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 HINSTANCE s_hDll; // Uniscribe DLL handle
- };
- //-----------------------------------------------------------------------------
- // EditBox control
- //-----------------------------------------------------------------------------
- class CDXUTEditBox : public CDXUTControl
- {
- 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 );
- protected:
- void PlaceCaret( int nCP );
- void DeleteSelectionText();
- void ResetCaretBlink();
- void CopyToClipboard();
- void PasteFromClipboard();
- CUniBuffer m_Buffer; // Buffer to hold text
- int m_nBorder; // Border of the window
- int m_nSpacing; // Spacing between the text and the edge of border
- RECT m_rcText; // Bounding rectangle for the text
- RECT m_rcRender[9]; // Convenient rectangles for rendering elements
- double m_dfBlink; // Caret blink time in milliseconds
- double m_dfLastBlink; // Last timestamp of caret blink
- bool m_bCaretOn; // Flag to indicate whether caret is currently visible
- int m_nCaret; // Caret position, in characters
- bool m_bInsertMode; // If true, control is in insert mode. Else, overwrite mode.
- int m_nSelStart; // Starting position of the selection. The caret marks the end.
- int m_nFirstVisible;// First visible character in the edit control
- D3DCOLOR m_TextColor; // Text color
- D3DCOLOR m_SelTextColor; // Selected text color
- D3DCOLOR m_SelBkColor; // Selected background color
- D3DCOLOR m_CaretColor; // Caret color
- // Mouse-specific
- bool m_bMouseDrag; // True to indicate drag in progress
- // Static
- static bool s_bHideCaret; // If true, we don't render the caret.
- };
- //-----------------------------------------------------------------------------
- // IME-enabled EditBox control
- //-----------------------------------------------------------------------------
- #define MAX_CANDLIST 10
- #define MAX_COMPSTRING_SIZE 256
- class CDXUTIMEEditBox : public CDXUTEditBox
- {
- protected:
- // Empty implementation of the IMM32 API
- static INPUTCONTEXT* WINAPI Dummy_ImmLockIMC( HIMC ) { return NULL; }
- static BOOL WINAPI Dummy_ImmUnlockIMC( HIMC ) { return FALSE; }
- static LPVOID WINAPI Dummy_ImmLockIMCC( HIMCC ) { return NULL; }
- static BOOL WINAPI Dummy_ImmUnlockIMCC( HIMCC ) { return FALSE; }
- static BOOL WINAPI Dummy_ImmDisableTextFrameService( DWORD ) { return TRUE; }
- static LONG WINAPI Dummy_ImmGetCompositionStringW( HIMC, DWORD, LPVOID, DWORD ) { return IMM_ERROR_GENERAL; }
- static DWORD WINAPI Dummy_ImmGetCandidateListW( HIMC, DWORD, LPCANDIDATELIST, DWORD ) { return 0; }
- static HIMC WINAPI Dummy_ImmGetContext( HWND ) { return NULL; }
- static BOOL WINAPI Dummy_ImmReleaseContext( HWND, HIMC ) { return FALSE; }
- static HIMC WINAPI Dummy_ImmAssociateContext( HWND, HIMC ) { return NULL; }
- static BOOL WINAPI Dummy_ImmGetOpenStatus( HIMC ) { return 0; }
- static BOOL WINAPI Dummy_ImmSetOpenStatus( HIMC, BOOL ) { return 0; }
- static BOOL WINAPI Dummy_ImmGetConversionStatus( HIMC, LPDWORD, LPDWORD ) { return 0; }
- static HWND WINAPI Dummy_ImmGetDefaultIMEWnd( HWND ) { return NULL; }
- static UINT WINAPI Dummy_ImmGetIMEFileNameA( HKL, LPSTR, UINT ) { return 0; }
- static UINT WINAPI Dummy_ImmGetVirtualKey( HWND ) { return 0; }
- static BOOL WINAPI Dummy_ImmNotifyIME( HIMC, DWORD, DWORD, DWORD ) { return FALSE; }
- static BOOL WINAPI Dummy_ImmSetConversionStatus( HIMC, DWORD, DWORD ) { return FALSE; }
- static BOOL WINAPI Dummy_ImmSimulateHotKey( HWND, DWORD ) { return FALSE; }
- static BOOL WINAPI Dummy_ImmIsIME( HKL ) { return FALSE; }
- // Traditional Chinese IME
- static UINT WINAPI Dummy_GetReadingString( HIMC, UINT, LPWSTR, PINT, BOOL*, PUINT ) { return 0; }
- static BOOL WINAPI Dummy_ShowReadingWindow( HIMC, BOOL ) { return FALSE; }
- // Verion library imports
- static BOOL APIENTRY Dummy_VerQueryValueA( const LPVOID, LPSTR, LPVOID *, PUINT ) { return 0; }
- static BOOL APIENTRY Dummy_GetFileVersionInfoA( LPSTR, DWORD, DWORD, LPVOID ) { return 0; }
- static DWORD APIENTRY Dummy_GetFileVersionInfoSizeA( LPSTR, LPDWORD ) { return 0; }
- // Function pointers: IMM32
- static INPUTCONTEXT* (WINAPI * _ImmLockIMC)( HIMC );
- static BOOL (WINAPI * _ImmUnlockIMC)( HIMC );
- static LPVOID (WINAPI * _ImmLockIMCC)( HIMCC );
- static BOOL (WINAPI * _ImmUnlockIMCC)( HIMCC );
- static BOOL (WINAPI * _ImmDisableTextFrameService)( DWORD );
- static LONG (WINAPI * _ImmGetCompositionStringW)( HIMC, DWORD, LPVOID, DWORD );
- static DWORD (WINAPI * _ImmGetCandidateListW)( HIMC, DWORD, LPCANDIDATELIST, DWORD );
- static HIMC (WINAPI * _ImmGetContext)( HWND );
- static BOOL (WINAPI * _ImmReleaseContext)( HWND, HIMC );
- static HIMC (WINAPI * _ImmAssociateContext)( HWND, HIMC );
- static BOOL (WINAPI * _ImmGetOpenStatus)( HIMC );
- static BOOL (WINAPI * _ImmSetOpenStatus)( HIMC, BOOL );
- static BOOL (WINAPI * _ImmGetConversionStatus)( HIMC, LPDWORD, LPDWORD );
- static HWND (WINAPI * _ImmGetDefaultIMEWnd)( HWND );
- static UINT (WINAPI * _ImmGetIMEFileNameA)( HKL, LPSTR, UINT );
- static UINT (WINAPI * _ImmGetVirtualKey)( HWND );
- static BOOL (WINAPI * _ImmNotifyIME)( HIMC, DWORD, DWORD, DWORD );
- static BOOL (WINAPI * _ImmSetConversionStatus)( HIMC, DWORD, DWORD );
- static BOOL (WINAPI * _ImmSimulateHotKey)( HWND, DWORD );
- static BOOL (WINAPI * _ImmIsIME)( HKL );
- // Function pointers: Traditional Chinese IME
- static UINT (WINAPI * _GetReadingString)( HIMC, UINT, LPWSTR, PINT, BOOL*, PUINT );
- static BOOL (WINAPI * _ShowReadingWindow)( HIMC, BOOL );
- // Function pointers: Verion library imports
- static BOOL (APIENTRY * _VerQueryValueA)( const LPVOID, LPSTR, LPVOID *, PUINT );
- static BOOL (APIENTRY * _GetFileVersionInfoA)( LPSTR, DWORD, DWORD, LPVOID );
- static DWORD (APIENTRY * _GetFileVersionInfoSizeA)( LPSTR, LPDWORD );
- public:
- CDXUTIMEEditBox( CDXUTDialog *pDialog = NULL );
- virtual ~CDXUTIMEEditBox();
- static void Initialize();
- static void Uninitialize();
- static HRESULT StaticOnCreateDevice();
- static bool StaticMsgProc( UINT uMsg, WPARAM wParam, LPARAM lParam );
- static void EnableImeSystem( bool bEnable );
- virtual void Render( IDirect3DDevice9* pd3dDevice, float fElapsedTime );
- virtual bool MsgProc( UINT uMsg, WPARAM wParam, LPARAM lParam );
- virtual bool HandleMouse( UINT uMsg, POINT pt, WPARAM wParam, LPARAM lParam );
- virtual void UpdateRects();
- virtual void OnFocusIn();
- virtual void OnFocusOut();
- void PumpMessage();
- virtual void RenderCandidateReadingWindow( IDirect3DDevice9* pd3dDevice, float fElapsedTime, bool bReading );
- virtual void RenderComposition( IDirect3DDevice9* pd3dDevice, float fElapsedTime );
- virtual void RenderIndicator( IDirect3DDevice9* pd3dDevice, float fElapsedTime );
- protected:
- static WORD GetLanguage() { return LOWORD( s_hklCurrent ); }
- static WORD GetPrimaryLanguage() { return PRIMARYLANGID( LOWORD( s_hklCurrent ) ); }
- static WORD GetSubLanguage() { return SUBLANGID( LOWORD( s_hklCurrent ) ); }
- static void SendKey( BYTE nVirtKey );
- static DWORD GetImeId( UINT uIndex = 0 );
- static void CheckInputLocale();
- static void CheckToggleState();
- static void SetupImeApi();
- static void ResetCompositionString();
- void TruncateCompString( bool bUseBackSpace = true, int iNewStrLen = 0 );
- void FinalizeString( bool bSend );
- static void GetReadingWindowOrientation( DWORD dwId );
- static void GetPrivateReadingString();
- void SendCompString();
- protected:
- enum { INDICATOR_NON_IME, INDICATOR_CHS, INDICATOR_CHT, INDICATOR_KOREAN, INDICATOR_JAPANESE };
- enum IMESTATE { IMEUI_STATE_OFF, IMEUI_STATE_ON, IMEUI_STATE_ENGLISH };
- struct CCandList
- {
- WCHAR awszCandidate[MAX_CANDLIST][256];
- CUniBuffer HoriCand; // Candidate list string (for horizontal candidate window)
- int nFirstSelected; // First character position of the selected string in HoriCand
- int nHoriSelectedLen; // Length of the selected string in HoriCand
- DWORD dwCount; // Number of valid entries in the candidate list
- DWORD dwSelection; // Currently selected candidate entry relative to page top
- DWORD dwPageSize;
- int nReadingError; // Index of the error character
- bool bShowWindow; // Whether the candidate list window is visible
- RECT rcCandidate; // Candidate rectangle computed and filled each time before rendered
- };
- struct CInputLocale
- {
- HKL m_hKL; // Keyboard layout
- WCHAR m_wszLangAbb[3]; // Language abbreviation
- WCHAR m_wszLang[64]; // Localized language name
- };
- // Application-wide data
- static HINSTANCE s_hDllImm32; // IMM32 DLL handle
- static HINSTANCE s_hDllVer; // Version DLL handle
- static HIMC s_hImcDef; // Default input context
- static HKL s_hklCurrent; // Current keyboard layout of the process
- static bool s_bVerticalCand; // Indicates that the candidates are listed vertically
- static LPWSTR s_wszCurrIndicator; // Points to an indicator string that corresponds to current input locale
- static WCHAR s_aszIndicator[5][3]; // String to draw to indicate current input locale
- static bool s_bInsertOnType; // Insert the character as soon as a key is pressed (Korean behavior)
- static HINSTANCE s_hDllIme; // Instance handle of the current IME module
- static IMESTATE s_ImeState; // IME global state
- static bool s_bEnableImeSystem; // Whether the IME system is active
- static POINT s_ptCompString; // Composition string position. Updated every frame.
- static int s_nCompCaret; // Caret position of the composition string
- static int s_nFirstTargetConv; // Index of the first target converted char in comp string. If none, -1.
- static CUniBuffer s_CompString; // Buffer to hold the composition string (we fix its length)
- static BYTE s_abCompStringAttr[MAX_COMPSTRING_SIZE];
- static DWORD s_adwCompStringClause[MAX_COMPSTRING_SIZE];
- static WCHAR s_wszReadingString[32];// Used only with horizontal reading window (why?)
- static CCandList s_CandList; // Data relevant to the candidate list
- static bool s_bShowReadingWindow; // Indicates whether reading window is visible
- static bool s_bHorizontalReading; // Indicates whether the reading window is vertical or horizontal
- static bool s_bChineseIME;
- static CGrowableArray< CInputLocale > s_Locale; // Array of loaded keyboard layout on system
- // Color of various IME elements
- D3DCOLOR m_ReadingColor; // Reading string color
- D3DCOLOR m_ReadingWinColor; // Reading window color
- D3DCOLOR m_ReadingSelColor; // Selected character in reading string
- D3DCOLOR m_ReadingSelBkColor; // Background color for selected char in reading str
- D3DCOLOR m_CandidateColor; // Candidate string color
- D3DCOLOR m_CandidateWinColor; // Candidate window color
- D3DCOLOR m_CandidateSelColor; // Selected candidate string color
- D3DCOLOR m_CandidateSelBkColor; // Selected candidate background color
- D3DCOLOR m_CompColor; // Composition string color
- D3DCOLOR m_CompWinColor; // Composition string window color
- D3DCOLOR m_CompCaretColor; // Composition string caret color
- D3DCOLOR m_CompTargetColor; // Composition string target converted color
- D3DCOLOR m_CompTargetBkColor; // Composition string target converted background
- D3DCOLOR m_CompTargetNonColor; // Composition string target non-converted color
- D3DCOLOR m_CompTargetNonBkColor;// Composition string target non-converted background
- D3DCOLOR m_IndicatorImeColor; // Indicator text color for IME
- D3DCOLOR m_IndicatorEngColor; // Indicator text color for English
- D3DCOLOR m_IndicatorBkColor; // Indicator text background color
- // Edit-control-specific data
- int m_nIndicatorWidth; // Width of the indicator symbol
- RECT m_rcIndicator; // Rectangle for drawing the indicator button
- #if defined(DEBUG) || defined(_DEBUG)
- static bool m_bIMEStaticMsgProcCalled;
- #endif
- };
- #endif // DXUT_GUI_H